web-dev-qa-db-ja.com

chai expectにmochaユニットテストのカスタムエラーメッセージを提供するにはどうすればよいですか?

私はチャイの期待を使ったモカテストを持っています:

_it("should parse sails out of cache file", async () => {
    const sailExtractor = new Extractor();
    const result = await sailExtractor.extract("test.xml");

    try {
        expect(result.length).to.be.greaterThan(0);
        const withMandatoryFlight = result.filter((cruises) => {
            return cruises.hasMandatoryFlight === true;
        });
        expect(withMandatoryFlight.length).to.be.greaterThan(0);
        const cruiseOnly = result.filter((cruises) => {
            return cruises.hasMandatoryFlight === false;
        });

        expect(cruiseOnly.length).to.be.greaterThan(0);

        return Promise.resolve();
    } catch (e) {
        return Promise.reject(e);
    }
}
_

ここで、1つのto.be.greaterThan(0)期待値が失敗した場合、mochaのエラー出力は開発者フレンドリーではありません。

_ AssertionError: expected 0 to be above 0
      at Assertion.assertAbove (node_modules/chai/lib/chai/core/assertions.js:571:12)
      at Assertion.ctx.(anonymous function) [as greaterThan] (node_modules/chai/lib/chai/utils/addMethod.js:41:25)
      at _callee2$ (tests/unit/operator/croisiEurope/CroisXmlExtractorTest.js:409:61)
      at tryCatch (node_modules/regenerator-runtime/runtime.js:65:40)
      at Generator.invoke [as _invoke] (node_modules/regenerator-runtime/runtime.js:303:22)
      at Generator.prototype.(anonymous function) [as next] (node_modules/regenerator-runtime/runtime.js:117:21)
      at fulfilled (node_modules/tslib/tslib.js:93:62)
      at <anonymous>
      at process._tickDomainCallback (internal/process/next_tick.js:228:7)
_

より人に優しいものに置き換えたいと思います。 chaiにカスタマイズエラーメッセージを使用するように指示する方法はありますか?

この疑似コードのように使用できるようにしたい:

_ expect(result.length)
      .to.be.greaterThan(0)
      .withErrorMessage("It should parse at least one sail out of the flatfile, but result is empty");
_

そして、失敗したモカのエラーが表示されます:

_ AssertionError: It should parse at least one sail out of the flatfile, but result is empty
_
10
k0pernikus

すべてのexpectメソッドは、オプションのパラメーターmessageを受け入れます。

expect(1).to.be.above(2, 'nooo why fail??');
expect(1, 'nooo why fail??').to.be.above(2);

したがって、あなたの場合、それは次のようになります:

expect(result.length)
  .to.be.greaterThan(0, "It should parse at least one sail out of the flatfile, but result is empty");
13
alexmac

アサーションにshouldを使用する場合、条件が失敗した場合に書き出されるテスト関数に文字列を渡すことができます。例えば:

result.length.should.be.above(0, "It should parse at least one sail out of the flatfile, but result is empty");

これが期待どおりに可能かどうかはわかりません。 APIはそれについて言及していないようです。

0
robjwilkins