Sinon.jsを使ったモックとスタブ#
- はじめに
今回は、Sinon.jsを使って、JavaScriptアプリケーションのテストでモックとスタブを実装する方法を学びましょう。Sinon.jsは、テストのためのスパイ、スタブ、モックを提供するライブラリです。それでは、二人の説明を見ていきましょう。
テストのためにモックやスタブを作るライブラリだよね?
そうなの!Sinon.jsは、テストのためにスパイ、スタブ、モックを簡単に作れるようにするライブラリなの!
まず、Sinon.jsをプロジェクトに追加するには、
npm install sinon
でインストールするのよ!
なるほど、
npm install sinon
でSinon.jsをインストールできるんだね!
そうなの!それでは、スタブを使ってテストを書いてみましょう。
function fetchData(callback) {
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => callback(null, data))
.catch(error => callback(error));
}
この関数は、外部APIからデータを取得するんだね。
そうなの!でも、テストのときには、外部APIに依存しないようにしたいの。だから、
fetch
関数をスタブに置き換えるの!
Sinon.jsを使って、
fetch
関数をスタブに置き換えるには、こんな感じに書くのよ!
const sinon = require('sinon');
const assert = require('assert');
describe('fetchData', () => {
it('should call the callback with the fetched data', () => {
const fetchStub = sinon.stub(global, 'fetch');
const fakeData = { key: 'value' };
fetchStub.resolves({
json: () => Promise.resolve(fakeData),
});
const callback = sinon.spy();
fetchData(callback);
fetchStub.restore();
assert(callback.calledWith(null, fakeData));
});
});
なるほど、
sinon.stub()
を使って、
fetch
関数をスタブに置き換えて、テストが外部APIに依存しないようにするんだね!
そうなの!Sinon.jsを使うことで、モックやスタブを簡単に作成して、テストが外部APIや他のコンポーネントに依存しないようにできるの!
モックも簡単だよ!例えば、コールバック関数をモックに置き換えたい場合は、
sinon.mock()
を使うの!こんな感じ!
const sinon = require('sinon');
const assert = require('assert');
describe('fetchData', () => {
it('should call the callback with the fetched data', () => {
const fetchStub = sinon.stub(global, 'fetch');
const fakeData = { key: 'value' };
fetchStub.resolves({
json: () => Promise.resolve(fakeData),
});
const callback = sinon.mock()
.once()
.withArgs(null, fakeData);
fetchData(callback);
fetchStub.restore();
callback.verify();
});
});
なるほど、
sinon.mock()
を使って、コールバック関数をモックに置き換えて、テストを書くんだね!
そうなの!モックとスタブを使うことで、テストが他のコンポーネントや外部サービスに依存しないようにできるから、テストがより安定するの!
- おわりに
Sinon.jsを使って、JavaScriptアプリケーションのテストでモックとスタブを実装する方法を学びました。これにより、テストが他のコンポーネントや外部サービスに依存しないようにでき、テストがより安定するようになります!👍