Ant*_*gov 3 mocha.js node.js proxyquire
在测试模块 A 中的方法时,我使用 proxyquire 模拟模块 B 的方法(在模块 A 中注入了 require())。模拟(mocking ad.model.js 模块的 get_campaigns 方法):
const admitadModelMock = {
'../services/admitad.model': {
get_campaigns: (limit, page) => new Promise((resolve, reject) =>
setTimeout(resolve({campaigns: testData, count: 1000}), 5000)
),
},
};
Run Code Online (Sandbox Code Playgroud)
考试:
it('shold get all campaigns from Admitad', async function () {
this.timeout(60000);
let err, data;
// mock dependencie (get_campaigns() of module B will be mocked):
let $serviceStubbed = proxyquire('../services/campaign-sync', admitadModelMock);
// getAdmitadCampaigns() just calls get_campaigns method of module B
[err, data] = await to($serviceStubbed.getAdmitadCampaigns(50));
data.length.should.be.equal(50);
});
Run Code Online (Sandbox Code Playgroud)
问题是测试通过而没有预期的 5 秒延迟。
更新。
这是有效的:
setTimeout(() => resolve({campaigns: mockedCampaigns, count: 1000}), 2000)
Run Code Online (Sandbox Code Playgroud)
这是我最后的好方法:
setTimeout(() => resolve({campaigns: mockedCampaigns, count: 1000}), 2000)
Run Code Online (Sandbox Code Playgroud)
setTimeout(resolve({campaigns: testData, count: 1000}), 5000)
Run Code Online (Sandbox Code Playgroud)
上面的线路呼叫流程可以解释如下。
let res = resolve({campaigns: testData, count: 1000});
setTimeout(res, 5000);
Run Code Online (Sandbox Code Playgroud)
你不想那样,是吗:-)
尝试,
setTimeout(() => resolve({ campaigns: testData, count: 1000 }), 5000)
Run Code Online (Sandbox Code Playgroud)
因为它将resolve调用包装在匿名函数中并将其作为第一个参数传递给setTimeout调用。
| 归档时间: |
|
| 查看次数: |
6733 次 |
| 最近记录: |