Sinon stub withArgs 忽略额外参数
Sinon stub withArgs ignores extra arguments
我的生产代码如下所示:
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 return 值?
存根
一种方法是使用 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();
另一种选择,也许您可以尝试检查 convertToWord
的调用,例如
...
expect(result).toBeEqual('one');
// check the function
sinon.assert.alwaysCalledWithExactly(mockConvertToWord, '1');
参考:
希望对您有所帮助
我的生产代码如下所示:
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 return 值?
存根
一种方法是使用 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();
另一种选择,也许您可以尝试检查 convertToWord
的调用,例如
...
expect(result).toBeEqual('one');
// check the function
sinon.assert.alwaysCalledWithExactly(mockConvertToWord, '1');
参考:
希望对您有所帮助