Sam*_*apa 4 javascript testing stub node.js sinon
我有一个功能:
var publish = function(a, b, c) {
main = a + getWriterName(b,c);
}
Run Code Online (Sandbox Code Playgroud)
getWriterName 是另一个函数:
var getWriterName = function(b,c) {
return 'Hello World';
}
Run Code Online (Sandbox Code Playgroud)
我想测试“发布”功能,但我不想在测试“发布”时运行“getWriterName”功能。我觉得我存根了 getWriterName 函数,因为我不想每次测试“发布”时都运行它,但是我该怎么做?我做了类似的事情:
var sandbox = sinon.sandbox.create();
sandbox.stub(getWriterName).returns('done');
Run Code Online (Sandbox Code Playgroud)
但这给了我一个错误
类型错误:试图将未定义的未定义属性包装为函数
如果我在写路径中,我的存根有什么问题?
编辑:我正在使用重新布线所以想要使用重新布线的解决方案
这就是 Sinon 可以与 Rewire 一起使用来存根函数的方式。如果存根函数是私有的,则在这种情况下重新连接特别有用。
it('getWriteName always returns "Hello World"', function() {
var stub = sandbox.stub();
stub.returns('Hello World');
var unset = log.__set__('getWriterName', stub);
// your test and expectations here
unset();
// it's always good to restore the previous state
});
Run Code Online (Sandbox Code Playgroud)
这解决了我的问题:
如果我的函数位于名为main.jsthen 的文件中,首先我会将文件重新连接为:
var main = rewire('main');
Run Code Online (Sandbox Code Playgroud)
然后,要对一个函数中调用的任何其他函数进行存根,就我而言,当我必须存根时,getWriterName我会这样做:
main.__set__('getWriterName', function(b, c) {
return 'Something Else'
}
Run Code Online (Sandbox Code Playgroud)
最后使用完后,执行以下操作:
main.restore();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5429 次 |
| 最近记录: |