Gon*_*bia 5 testing stub sinon ava
我有以下情况:
js
import fetch from 'node-fetch'
import httpClient from './myClient/httpClient'
export default class{
async init(){
const response = await fetch('some_url')
return httpClient.init(response.payload)
}
}
Run Code Online (Sandbox Code Playgroud)
A_spec.js
import test from 'ava'
import sinon from 'sinon'
import fetch from 'node-fetch'
import httpClient from './myClient/httpClient'
import A from './src/A'
test('a async test', async (t) => {
const instance = new A()
const stubbedHttpInit = sinon.stub(httpClient, 'init')
sinon.stub(fetch).returns(Promise.resolve({payload: 'data'})) //this doesn't work
await instance.init()
t.true(stubbedHttpInit.init.calledWith('data'))
})
Run Code Online (Sandbox Code Playgroud)
我的想法是检查是否已使用获取请求中获得的有效负载调用了 httpClient 的 init 方法。
我的问题是:当我测试 A 的 init 方法时,如何模拟存根返回值的获取依赖项?
最后我解决了这个问题,fetch.Promise像这样存根参考:
sinon.stub(fetch, 'Promise').returns(Promise.resolve(responseObject))
Run Code Online (Sandbox Code Playgroud)
对此的解释是对本node-fetch机 Promise 的引用,当您调用时fetch(),此方法返回一个fetch.Promise. 看一下这个
sinon.stub(fetch)无法存根函数本身。相反,您需要node-fetch从内部存根依赖关系./src/A,也许使用类似的东西proxyquire:
import proxyquire from 'proxyquire`
const A = proxyquire('./src/A', {
'node-fetch': sinon.stub().returns(Promise.resolve({payload: 'data'}))
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6059 次 |
| 最近记录: |