承诺的摩卡单一测试失败并同时通过

时间:2017-10-06 15:49:43

标签: promise mocha bluebird chai-as-promised

我目前正在遗留系统中编写一些测试,并对此处的测试结果感到困惑。 我在这里进行了一次测试,但是按预期失败了但是mocha显示为1 passing1 failing

我正在使用Bluebird承诺,mochachai-as-promisedsinonsinon-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

1 个答案:

答案 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>