Axios
Vueアプリケーションやほとんどの新しいコードでは、サーバとの通信にAxiosを使用しています。
すべてのデフォルトが設定されていることを保証するために、Axiosを直接使用せず、axios_utils
からAxiosをインポートする必要があります。
CSRFトークン
すべてのリクエストには CSRF トークンが必要です。このトークンが設定されていることを保証するために、Axios をインポートしてトークンを設定し、axios
をエクスポートします。
トークンが設定されていることを保証するために Axios を直接使用する代わりに、このエクスポートモジュールを使用する必要があります。
使用方法
import axios from './lib/utils/axios_utils';
axios.get(url)
.then((response) => {
// `data` is the response that was provided by the server
const data = response.data;
// `headers` the headers that the server responded with
// All header names are lower cased
const paginationData = response.headers;
})
.catch(() => {
//handle the error
});
テストにおける Axios の模擬応答
レスポンスをモックするためにaxios-mock-adapter を使います。
spyOn()
を上回る利点があります:
- レスポンスオブジェクトを作成する必要なし
- コールスルーができない(これは避けたい)
- エラー・ケースをテストするための明確なAPI
- 異なるレスポンスを可能にする
replyOnce()
を提供します。
また、Axiosインターセプターはモッキングに適していないため、使用しないことにしました。
物件例
import axios from '~/lib/utils/axios_utils';
import MockAdapter from 'axios-mock-adapter';
let mock;
beforeEach(() => {
// This sets the mock adapter on the default instance
mock = new MockAdapter(axios);
// Mock any GET request to /users
// arguments for reply are (status, data, headers)
mock.onGet('/users').reply(200, {
users: [
{ id: 1, name: 'John Smith' }
]
});
});
afterEach(() => {
mock.restore();
});
Axiosを使用したテストでのモックポールリクエスト
ポーリング関数にはヘッダオブジェクトが必要なので、 第三引数には必ずオブジェクトを指定する必要があります:
mock.onGet('/users').reply(200, { foo: 'bar' }, {});