gpt4 book ai didi

Node.js sinon 在并行执行中 stub 函数导致测试失败

转载 作者:搜寻专家 更新时间:2023-10-31 23:46:47 25 4
gpt4 key购买 nike

我有 2 个测试用例,它们测试相同的功能,只是采用 2 个不同的执行路径,所以为了说明:

MyClass.prototype.functionBeingTested = function() {
if (this.check1()) {
this.isCheck1Called = true;
} else if (this.check2()) {
this.isCheck1Called = false;
} else {
...
}
};

我的2个测试用例如下:

it('should take check1() execution path', function() {
var myClass= new MyClass({}, {}, {});
var check1Stub sinon.stub(MyClass.prototype, 'check1');
check1Stub.returns(true);
myClass.functionBeingTested();
myClass.isCheck1Called.should.equal(true);
});

it('should take check2() execution path', function() {
var myClass= new MyClass({}, {}, {});
var check2Stub sinon.stub(MyClass.prototype, 'check2');
check2Stub.returns(true);
myClass.functionBeingTested();
myClass.isCheck1Called.should.equal(false);
});

现在默认情况下,check1() 返回 false,所以我不在第二个测试用例中 stub ,但是当第二个用例运行时,check1() 函数 stub 仍然处于事件状态,并导致第二个案例也进入第一个案例的执行路径,从而使第二个案例测试失败。

我知道这是并行运行测试的问题,第一个测试用例仍在使用第一个 sinon stub ,无论如何我可以解决这个问题吗?

最佳答案

在第一次测试结束时,你应该恢复原来的方法(这总是一件好事,以避免测试被之前的测试影响):

check1Stub.restore()

或者,您也可以使用 Sinon sandbox在以下位置运行每个测试:

describe('MyClass', function() {

beforeEach(function() {
this.sinon = sinon.sandbox.create();
});

afterEach(function() {
this.sinon.restore();
});

it('should take check1() execution path', function() {
var myClass = new MyClass({}, {}, {});
// `this.sinon` is the sandbox
var check1Stub = this.sinon.stub(MyClass.prototype, 'check1');
check1Stub.returns(true);
myClass.functionBeingTested();
myClass.isCheck1Called.should.equal(true);
});

it('should take check2() execution path', function() {
var myClass = new MyClass({}, {}, {});
var check2Stub = this.sinon.stub(MyClass.prototype, 'check2');
check2Stub.returns(true);
myClass.functionBeingTested();
myClass.isCheck1Called.should.equal(false);
});
});

(参见 mocha-sinon ,其作用完全相同)

关于Node.js sinon 在并行执行中 stub 函数导致测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37482309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com