Unit testing sinon.js:创建一个';存根';对于方法和测试,忽略存根
我在node.js中编写了以下代码:Unit testing sinon.js:创建一个';存根';对于方法和测试,忽略存根,unit-testing,mocking,sinon,stub,Unit Testing,Mocking,Sinon,Stub,我在node.js中编写了以下代码: const rp = require('request-promise'); export async function readSite() { try { let response = await rp('http://www.google.com'); return response; } catch(err) { console.log(err); } } expor
const rp = require('request-promise');
export async function readSite() {
try {
let response = await rp('http://www.google.com');
return response;
}
catch(err) {
console.log(err);
}
}
export async function main() {
let response = await readSite();
return response;
}
我想测试main
方法。由于readSite
是一种异步方法,我不想在测试期间运行,因此我想模拟/存根它,这意味着每当测试调用readSite
方法时,它都会自动得到响应(无需调用外部网站)
当我运行测试时(在终端中运行mocha./test.js
),我看到“www.google.com”已经被读取,这意味着存根没有成功
我做错了什么?以下是解决方案:
index.js
:
const rp=require(“请求承诺”);
异步函数readSite(){
试一试{
让响应=等待rp(“http://www.google.com");
返回响应;
}捕捉(错误){
控制台日志(err);
}
}
异步函数main(){
let response=等待导出。readSite();
返回响应;
}
exports.readSite=readSite;
exports.main=main;
index.spec.js
:
const sinon=require(“sinon”);
const{expect}=require(“chai”);
const app=require(“.”);
描述(“主”,()=>{
它(“应该是存根读取站点”,异步()=>{
const readSiteStub=sinon.stub(应用程序,“readSite”)。解析(“blabla”);
const actual=wait app.main();
期望(实际)相等(“blabla”);
restore();
});
});
单元测试结果和覆盖率报告:
main
✓ 存根是否应该读取站点
1次通过(9ms)
---------------|----------|----------|----------|----------|-------------------|
文件|%Stmts |%Branch |%Funcs |%Line |未覆盖行|s|
---------------|----------|----------|----------|----------|-------------------|
所有文件| 77.78 | 100 | 75 | 77.78 ||
index.js | 55.56 | 100 | 50 | 55.56 | 4,5,6,8|
index.spec.js | 100 | 100 | 100 | 100 ||
---------------|----------|----------|----------|----------|-------------------|
源代码:
有关更多信息,请参阅:我运行了这段代码,测试似乎通过了,但仍然被读取。@CrazySynthax它不应该被读取。我们已经中断了
readSite
函数,这意味着testrunner将调用中断的函数并返回blabla
mock数据,而不是返回真实的响应数据。否则,断言将失败。这也会导致测试用例失败。
const sinon = require('sinon');
const app = require("./app");
describe('when there was no ingredient', async() => {
it('mama would be angry', async () => {
sinon.stub(app, 'readSite').returns(Promise.resolve('blabla'));
let res = await app.main();
console.log("*************************************", res);
})
})