sinon 期望值不同 arguments/return
Different arguments/return values for sinon expectation
我正在为我的模块编写单元测试,并使用 SinonJS 来验证对其他模块的函数调用的一些期望。首先,我为另一个模块注册了一个模拟:
var otherModule = {
getConfig : function () {}
};
mockery.registerMock("otherModule", otherModule);
稍后,我 运行 进行了一些测试并(成功地)验证了一些预期,例如:
var otherModuleMock = sinon.mock(otherModule);
otherModuleMock
.expects("getConfig")
.once()
.withArgs("A")
.returns(configValuesForA);
// run test
otherModuleMock.verify(); // <- succeeds
我 运行 但是,当模块调用 getConfig
函数两次时,使用不同的参数:
otherModuleMock
.expects("getConfig")
.once()
.withArgs("A")
.returns(configValuesForA);
otherModuleMock
.expects("getConfig")
.once()
.withArgs("B")
.returns(configValuesForB);
根据我对文档的理解,这应该可行。但是,这会导致以下错误:
ExpectationError: Unexpected call: getConfig(A)
Expectation met: getConfig(A[, ...]) once
Expectation met: getConfig(B[, ...]) once
我尝试用 atLeast(1)
替换 once()
或完全删除它。我还尝试捕获 otherModuleMock.expect("getConfig")
返回的期望值,然后在其上应用 withArgs
和 returns
。都无济于事。
很确定我正在以不应该的方式使用 mock()
,但我应该如何从这里开始?
原来我正在测试的模块实际上调用了 getConfig
3 次:一次调用 A
,一次调用 B
,然后再次调用 A
。
显然 Sinon 跟踪所有 expectations/calls 的顺序,这就是使用 atLeast(1)
而不是 once()
时测试甚至失败的原因。当我现在看它时是有道理的,但这些案例并没有真正广泛地记录在 Sinon 文档中(在我自己的辩护中)。
我正在为我的模块编写单元测试,并使用 SinonJS 来验证对其他模块的函数调用的一些期望。首先,我为另一个模块注册了一个模拟:
var otherModule = {
getConfig : function () {}
};
mockery.registerMock("otherModule", otherModule);
稍后,我 运行 进行了一些测试并(成功地)验证了一些预期,例如:
var otherModuleMock = sinon.mock(otherModule);
otherModuleMock
.expects("getConfig")
.once()
.withArgs("A")
.returns(configValuesForA);
// run test
otherModuleMock.verify(); // <- succeeds
我 运行 但是,当模块调用 getConfig
函数两次时,使用不同的参数:
otherModuleMock
.expects("getConfig")
.once()
.withArgs("A")
.returns(configValuesForA);
otherModuleMock
.expects("getConfig")
.once()
.withArgs("B")
.returns(configValuesForB);
根据我对文档的理解,这应该可行。但是,这会导致以下错误:
ExpectationError: Unexpected call: getConfig(A)
Expectation met: getConfig(A[, ...]) once
Expectation met: getConfig(B[, ...]) once
我尝试用 atLeast(1)
替换 once()
或完全删除它。我还尝试捕获 otherModuleMock.expect("getConfig")
返回的期望值,然后在其上应用 withArgs
和 returns
。都无济于事。
很确定我正在以不应该的方式使用 mock()
,但我应该如何从这里开始?
原来我正在测试的模块实际上调用了 getConfig
3 次:一次调用 A
,一次调用 B
,然后再次调用 A
。
显然 Sinon 跟踪所有 expectations/calls 的顺序,这就是使用 atLeast(1)
而不是 once()
时测试甚至失败的原因。当我现在看它时是有道理的,但这些案例并没有真正广泛地记录在 Sinon 文档中(在我自己的辩护中)。