如何解决如何使用 sinon 模拟独立的导入函数
如何用 sinon 模拟这个 axios 导入,然后使用期望?我试过了:
import axios from 'axios';
axiosMock = sinon.mock(axios);
但期望失败:
describe('Random test',() => {
it('should run the test',async () => {
axiosMock.withArgs(sinon.match.any).once();
await getName();
}
}
被测函数为:
import axios,{ AxiosRequestConfig } from 'axios';
async function getName() {
const config: AxiosRequestConfig = {
method: 'GET',url: ' someUrl',headers: {},};
const res = await axios(config);
return res;
}
解决方法
Sinon 不支持从模块导入的存根独立函数。一种解决方案是使用 link-seams。因此,我们需要使用 proxyquire 来构造接缝。
例如
getName.ts
:
import axios,{ AxiosRequestConfig } from 'axios';
export async function getName() {
const config: AxiosRequestConfig = {
method: 'GET',url: 'someUrl',headers: {},};
const res = await axios(config);
return res;
}
getName.test.ts
:
import proxyquire from 'proxyquire';
import sinon from 'sinon';
describe('68212908',() => {
it('should pass',async () => {
const axiosStub = sinon.stub().resolves('mocked response');
const { getName } = proxyquire('./getName',{
axios: axiosStub,});
const actual = await getName();
sinon.assert.match(actual,'mocked response');
sinon.assert.calledWithExactly(axiosStub,{
method: 'GET',});
});
});
测试结果:
68212908
✓ should pass (1399ms)
1 passing (1s)
------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
------------|---------|----------|---------|---------|-------------------
All files | 100 | 100 | 100 | 100 |
getName.ts | 100 | 100 | 100 | 100 |
------------|---------|----------|---------|---------|-------------------
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。