2016-11-16 11 views
1

私はいくつかのNodeメソッドをテストするためにMocha、Chai、Sinonを使っています。SinonとChaiと常に一緒に通るテスト

このテストに合格し、 'calledOnce'を 'calledTwice'に変更すると、期待通りに失敗します。私は第二の試験で「calledTwice」のテストしてい

it('should call checkIfRoomExists once', function (done) { 
     var check = sandbox.spy(RoomInfoModel, 'checkIfRoomExists'); 
     ViewBusiness.getViewToRender("thisisanoneknownroom", function (viewName) { 
      expect(check).to.have.been.calledTwice; 
      done(); 
     }) 
    }); 

注:私がしようとすると、チュートリアルに従うとき

it('should call checkIfRoomExists once', function (done) { 
      var check = sandbox.spy(RoomInfoModel, 'checkIfRoomExists'); 
      ViewBusiness.getViewToRender("thisisanoneknownroom", function (viewName) { 
       expect(check.calledOnce).to.equal(true); 
       done(); 
      }) 
     }); 

はしかし「期待は」は、このように設定されています。それはまだ通り過ぎる。私がそれを 'notCalled'に変更すると、それはまだ通り過ぎます。基本的には常に通り過ぎます。

私には何が欠けていますか?

+0

私は、状態を変更するテストとは関係ありません。私はもう一方に置き換えて、サンドボックスを破っています。 –

答えて

1

chai.useにSinonのアサーションを追加することを忘れた場合、私があなたが報告する振る舞いを再現できる唯一の方法です。

const sinon = require("sinon"); 
const chai = require("chai"); 
const sinonChai = require("sinon-chai"); 
chai.use(sinonChai); // This is crucial to get Sinon's assertions. 
const expect = chai.expect; 

it("test",() => { 
    const stub = sinon.stub(); 
    stub(); 
    expect(stub).to.have.been.calledTwice; 
}); 

しかし、あなたは同じコードを取ると chai.use(sinonChai)をコメントアウトした場合、テストは合格します:例えば、これは(テストが失敗した)期待通りに動作します!


お楽しみのために、expect(stub).to.have.been.platypusを試してみると、それも合格します。 Chaiのexpectインターフェイスは無意味な識別子を許容します。

+0

ありがとう、それはそれをソート!しかし、私は期待のステートメントの入力ミスのためにテストを通過すると思うか分からない。 –

+0

ええ、それは問題です。私はChaiをたくさん使っていますが、私は 'should'インタフェースを使うことは決してなく、' expect'インタフェースを使うことはめったにありません。私はすでにそれを使用しているサードパーティのコードに貢献するときに使用します。私自身のコードでは、 'assert'インターフェースを使用します。プロパティを持つ魔法を実行しようとはしませんので、間違ったメソッド名を使用すると**難しいです**。 – Louis

関連する問題