是否可以在一次测试中将方法存根两次以获得 return 不同的结果?
Possible to stub method twice within a single test to return different results?
我想重新存根 someHandler.getStatus
,但我得到 TypeError: Attempted to wrap getStatus which is already wrapped
..
it('is a test', function() {
sandbox.stub(someHandler, 'getStatus', function(callback) {
callback(null, {
value: 1
});
});
sandbox.stub(someOtherHandler, 'doSomething', function(callback) {
callback(null);
});
sandbox.stub(someHandler, 'getStatus', function(callback) {
callback(null, {
value: 0
});
});
});
尝试使用外部变量跟踪调用。第一次调用时,return 第一个值并递增计数器。第二次调用(以及所有后续调用),return 第二个值。
it('is a test', function() {
let callCount = 0
sandbox.stub(someHandler, 'getStatus', function(callback) {
callback(null, {
value: callCount++ == 0 ? 1 : 0
});
});
sandbox.stub(someOtherHandler, 'doSomething', function(callback) {
callback(null);
});
});
这是一个处理 2 个调用的简单示例,但您可以根据需要扩展它以处理多个调用。
Sinon 有一个很好的 API 用于处理对同一个存根方法的多次调用 (stub.onCall(n);)
。
示例来自 stub api doc:
"test should stub method differently on consecutive calls": function () {
var callback = sinon.stub();
callback.onCall(0).returns(1);
callback.onCall(1).returns(2);
callback.returns(3);
callback(); // Returns 1
callback(); // Returns 2
callback(); // All following calls return 3
}
您还可以使用 onFirstCall()
、onSecondCall()
和 onThirdCall()
。
我们在测试中广泛使用这种方法。
我想重新存根 someHandler.getStatus
,但我得到 TypeError: Attempted to wrap getStatus which is already wrapped
..
it('is a test', function() {
sandbox.stub(someHandler, 'getStatus', function(callback) {
callback(null, {
value: 1
});
});
sandbox.stub(someOtherHandler, 'doSomething', function(callback) {
callback(null);
});
sandbox.stub(someHandler, 'getStatus', function(callback) {
callback(null, {
value: 0
});
});
});
尝试使用外部变量跟踪调用。第一次调用时,return 第一个值并递增计数器。第二次调用(以及所有后续调用),return 第二个值。
it('is a test', function() {
let callCount = 0
sandbox.stub(someHandler, 'getStatus', function(callback) {
callback(null, {
value: callCount++ == 0 ? 1 : 0
});
});
sandbox.stub(someOtherHandler, 'doSomething', function(callback) {
callback(null);
});
});
这是一个处理 2 个调用的简单示例,但您可以根据需要扩展它以处理多个调用。
Sinon 有一个很好的 API 用于处理对同一个存根方法的多次调用 (stub.onCall(n);)
。
示例来自 stub api doc:
"test should stub method differently on consecutive calls": function () {
var callback = sinon.stub();
callback.onCall(0).returns(1);
callback.onCall(1).returns(2);
callback.returns(3);
callback(); // Returns 1
callback(); // Returns 2
callback(); // All following calls return 3
}
您还可以使用 onFirstCall()
、onSecondCall()
和 onThirdCall()
。
我们在测试中广泛使用这种方法。