Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing sinon.js:创建一个';存根';对于方法和测试,忽略存根_Unit Testing_Mocking_Sinon_Stub - Fatal编程技术网

Unit testing sinon.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

我在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);
    }
}

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);
    })
})