chai-fetch 
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')
);
});
});
});
ヒント
-
ここに記載されているアサーションは非同期ですので、テストフレームワークが結果を待って障害をキャッチするように、返したり、
.then
やawait
で処理する必要があります。 -
サーバーレスポンスをモックするには、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)
テスト対象のオブジェクトがフェッチリスポンスの場合, あるいはフェッチリスポンスの約束の場合, これはレスポンスのステータスが指定されたステータスであると主張します。