我目前正在遗留系统中编写一些测试,并对此处的测试结果感到困惑。
我在这里进行了一次测试,但是按预期失败了但是mocha显示为1 passing
和1 failing
。
我正在使用Bluebird
承诺,mocha
,chai-as-promised
和sinon
与sinon-chai
进行间谍和存根。这是测试(我删除了理解我的问题所不需要的东西):
describe("with a triggerable activity (selection)", function () {
beforeEach(function stubData() {
stubbedTriggerFunction = sinon.stub(trigger, "newParticipation");
activityLibStub = ... // stub
selectionLibStub = ... // stub
fakeActivities = ... // simple data with just ONE element
fakeSelection = ... // simple data with just ONE element
// stub methods to return synthetic data
activityLibStub.returns(new Promise(function (resolve) {
resolve(fakeActivities);
}));
selectionLibStub.withArgs(1).returns(new Promise(function (resolve) {
resolve(fakeSelection);
}));
});
afterEach(function releaseStubs() {
// restore stubs...
});
it("should call the newParticipation function", function () {
var member = memberBuilder.buildCorrect();
trigger.allActivities(member)
.then(function () {
return expect(stubbedTriggerFunction).to.not.have.been.called;
})
.done();
})
});
此测试按预期失败,因为实际调用了函数 。但是,mocha告诉我一次测试通过,一次测试失败。这是我在这个模块中实现的唯一测试。
我很确定这与承诺有关,但我似乎无法弄清楚它是什么。如果我添加
.catch(function(){
chai.assert.fail();
})
在那个块之后,摩卡仍然声称一次测试通过了。该方法也只是调用一次,我只有一个合成数据集,我正在使用它。所以我不知道是什么告诉摩卡,这已经失败了......
有什么想法吗?
问候,Vegaaaa
答案 0 :(得分:3)
回报你的承诺,回报你的承诺,回报你的诺言。让我们现在一起念诵“回归,yoooooooour promise!”
it("should call the newParticipation function", function () {
var member = memberBuilder.buildCorrect();
return trigger.allActivities(member)
.then(function () {
return expect(stubbedTriggerFunction).to.not.have.been.called;
});
})
});
我还删除了.done()
,因为这对蓝鸟来说通常没用,并且在这里完全有害。摩卡仍然需要使用你的诺言。
(通常不鼓励使用,请参阅here。)如果你没有回复你的承诺,那么Mocha会将你的测试视为同步,并且最有可能会成功,因为你的测试并没有真正测试任何同步。然后,如果你得到一个异步失败,摩卡必须确定什么是失败的,并将尽力记录失败,但它可能导致有趣的事情,如测试数量不正确或相同的测试被报告为失败和成功! / p>