chai-fetch Travis ビルドステータス

Chai マッチャにより Fetch レスポンスの照合が明確かつ簡単になります

fetch('http://example.com').then((response) => response.text()).then((text) => expect(text).to.equal('hi there')) は、Fetch レスポンスの本文に対してアサーションする最も簡単な方法ですが、これは非常に面倒な作業です。このライブラリは、その面倒な作業を取り除き、作業をより簡単にします。

入門

次のコマンドを使用して chai-fetch をインストールします。

npm install --save-dev chai-fetch

Chai-fetch は commonjs モジュールであり、Node の場合も、browserify や webpack などのバンドルツールを使用しても、すぐに機能します。

Chai-fetch は TypeScript で記述されているため、JS でも完全に機能しますが、TypeScript も使用している場合は、すぐに動作する型定義も得られます。

これを使用したテストの例(http-server-mock を使用して HTTP レスポンスの偽装)は次のようになります。

const chai = require('chai');
const chaiFetch = require('chai-fetch');
chai.use(chaiFetch);

const { expect } = chai;

describe('Chai-fetch', () => {
    beforeEach(() => mockServer.start(8080));
    afterEach(() => mockServer.stop());

    describe('.responseText', () => {
        it('should match responses with matching bodies', () => {
            mockServer.get('/match').thenReply(200, 'matching body')
            .then(() =>
                expect(fetch('https://:8080/match')).to.have.responseText('matching body')
            );
        });
    });
});

ヒント

  • ここに記載されているアサーションは非同期ですので、テストフレームワークが結果を待って障害をキャッチするように、返したり、.thenawait で処理する必要があります。

  • サーバーレスポンスをモックするには、http-server-mock を参照してください。

  • このような HTTP テストを作成しており、Babel、TypeScript、または非常に最新のバージョンの JS エンジンを使用している場合は、async/await を使用して少し読みやすくすることができます。

      it('should match responses with matching bodies', async () => {
          await mockServer.get('/match').thenReply(200, 'matching body');
    
          await expect(fetch('https://:8080/match')).to.have.responseText('matching body');
      });
    

API

.responseText(expectedText)

例:expect(fetch('http://example.com')).to.have.responseText('hi there')

テスト対象が Fetch レスポンスまたは Fetch レスポンスに対する約束の場合、本文の全文が指定されたテキストと同じであることをアサートします。

正規表現を渡すこともできます:.responseText(/match a substring/)

これはステータスコードをテストするものではありません(fetch 自体がテストしないのと同じですが)、ただし、渡された応答の約束が完全に拒否された場合(たとえば、ネットワークエラーがある場合)、通常のテストと否定された両方のテストが失敗します。

.status(expectedStatus)

例:expect(fetch('http://example.com')).to.have.status(200)

テスト対象のオブジェクトがフェッチリスポンスの場合, あるいはフェッチリスポンスの約束の場合, これはレスポンスのステータスが指定されたステータスであると主張します。

さらに追加されます (ファイルを発行します!)