【发布时间】:2015-07-24 00:13:11
【问题描述】:
我有一个功能如下图:
function test(parms) {
var self = this;
return this.test2(parms)
.then(function (data) {
if (data) {
return ;
}
else {
return Bluebird.delay(1000)
.then(self.test.bind(self, parms));
}
}.bind(self));
};
我正在尝试为此功能编写单元测试。我正在使用sinon.stub 来模拟函数test2 的功能。
我编写了一个测试用例,其中test2 返回true,因此test 函数成功完成执行。但是我想要一个测试用例,第一个实例test2 返回false,它等待延迟,下一次test2 返回true。为此,我编写了如下测试用例:
var clock;
var result;
var test2stub;
var count = 0;
before(function () {
clock = sinon.useFakeTimers();
//object is defined before
test2stub = sinon.stub(object,"test2", function () {
console.log("Count is: " + count);
if (count === 0) {
return (Bluebird.resolve(false));
}
else if (count === 1) {
return (Bluebird.resolve(true));
}
});
clock.tick(1000);
object.test("xyz")
.then(function (data) {
result = data;
});
clock.tick(1000);
count = count + 1;
clock.tick(1000);
});
after(function () {
test2stub.restore();
clock.restore();
});
it("result should be undefined. Check if test2 returned false first & true next",
function () {
expect(result).to.be.undefined;
});
在日志中显示 count 的值仅为 0。
【问题讨论】:
标签: javascript node.js unit-testing sinon