Javascript 如何在Cypress中存根模块
我正在尝试使用Cypress存根一个模块。这是我到目前为止尝试过的,但不起作用 这是我的组件/页面的简短版本Javascript 如何在Cypress中存根模块,javascript,reactjs,cypress,Javascript,Reactjs,Cypress,我正在尝试使用Cypress存根一个模块。这是我到目前为止尝试过的,但不起作用 这是我的组件/页面的简短版本 //SomeComponent.jsx 从“/useSomething”导入{useSomething} 常量SomeComponent=()=>{ //使用一个定制的钩子 const{data,error}=useSomething() 常量渲染数据=()=>{ //将数据映射到JSX元素数组中 返回data.map(…) } 返回( {renderData()} ) } 导出默认组件
//SomeComponent.jsx
从“/useSomething”导入{useSomething}
常量SomeComponent=()=>{
//使用一个定制的钩子
const{data,error}=useSomething()
常量渲染数据=()=>{
//将数据映射到JSX元素数组中
返回data.map(…)
}
返回(
{renderData()}
)
}
导出默认组件
这是我定制的钩子的样子
//useSomething.js
从“react”导入{useState}
从“./db”导入{getData}
导出常量useSomething=()=>{
const[data,setData]=useState({})
const[error,setError]=useState()
useffect(()=>{
getData()。然后(数据=>{
setData(数据)
}).catch(错误=>{
设置错误(错误)
})
//…这里还有一些不相关的代码
}, [])
返回{数据,错误}
}
下面是getData的外观
//getData.js
导出常量getData=()=>{
const data=//来自外部服务的一些API调用
返回数据
}
该方法通过db.js公开(实际上是db/index.js)
//db.js
从“/getData”导出*
我正在尝试存根getData.js以使e2e测试更加一致。这就是我所做的
//something.spec.js
//我写@src只是为了让这里的代码示例简短,它与我上面写的db.js是同一个文件
从'@src/db'导入*作为db
...
//这就是我试着做存根的方式
cy.stub(db,'getData')。解析(某物)
...
上面的存根不起作用。运行测试时,对外部服务的API调用仍在进行。文档本身让我推断我应该这样写,但它不起作用。您可以在窗口上公开
db
//useSomething.js
从“react”导入{useState}
将*作为数据库从“./db”导入
const{getData}=db;
if(window.Cypress){//仅在测试时
window.db=db;
}
在测试中
cy.window().then(win=>{
cy.stub(win.db,'getData')。解析(某物);
})
或用于存根API调用