我的生产代码如下:
exports.convertWord = number => { /* some logic here */ }
exports.methodUnderTest = () => {
return exports.convertWord(1);
}
测试代码:
const mockConvertToWord = sinon.stub();
mockConvertToWord.withArgs(1).returns('one');
fileUnderTest.convertWord = mockConvertToWord;
const result = fileUnderTest.methodUnderTest();
expect(result).toBeEqual('one');
以上测试为绿色。我希望如果将产品代码更改为此,测试也会失败:
exports.convertWord = number => { /* some logic here */ }
exports.methodUnderTest = () => {
return exports.convertWord(1, 'another arg');
}
但不是。即使我传递了我在withArgs
方法中没有指出的额外参数,Sinon也能正常工作。我该如何仅在使用正确数量的参数调用方法时告诉sinon返回值?
答案 0 :(得分:1)
一种方法是使用stub.callsFake(fakeFunction)
:
mockConvertToWord.callsFake((...args) => args.length === 1 && args[0] === 1 ? 'one' : undefined);
使用stub
的另一种方法是使用sinon.assert
来确保使用由@deerawan指出的预期参数调用stub
。
另一种方法是使用mock
:
const mock = sinon.mock(fileUnderTest);
mock.expects('convertWord').withExactArgs(1).returns("one");
const result = fileUnderTest.methodUnderTest();
expect(result).toBeEqual('one');
mock.verify();
答案 1 :(得分:1)
另一种选择,也许您可以尝试像这样检查convertToWord
的呼叫
...
expect(result).toBeEqual('one');
// check the function
sinon.assert.alwaysCalledWithExactly(mockConvertToWord, '1');
参考:
希望有帮助