Tôi đang cố kiểm tra cuộc gọi api trong ứng dụng redux. Mã khá nhiều theo mẫu nêu trong Async Tạo Lập Hành động phần của tài liệu Redux:Nock không chặn cuộc gọi API trong kiểm tra Redux
http://redux.js.org/docs/recipes/WritingTests.html
các ý chính của nó là bạn sử dụng Redux-giả-store để ghi lại và khẳng định chống lại bất kỳ hành động nào được kích hoạt.
Đây là toàn bộ kiểm tra, sử dụng Nock để thử cuộc gọi api:
import React from 'React'
import ReactDOM from 'react-dom'
import expect from 'expect';
import expectJSX from 'expect-jsx';
import TestUtils from 'react-addons-test-utils'
import configureMockStore from 'redux-mock-store'
import thunk from 'redux-thunk'
import nock from 'nock'
expect.extend(expectJSX);
import * as types from '../../constants/Actions'
describe('Async Search Actions',() => {
const thunkMiddleware = [ thunk ];
/* use redux-mock-store here */
const mockStore = configureMockStore(thunkMiddleware);
describe('The fetchArtistData action creator should',() => {
afterEach(() => {
nock.cleanAll()
})
it('Should fire off a ARTIST action when fetch is done', (done) => {
nock('http://ws.audioscrobbler.com')
.get('/2.0/')
.query({method: 'artist.search', artist: 'ho', api_key: 'abc123', format: 'json', limit: 5})
.reply(200,
{
fake: true
}
)
const expectedActions = [
{ type: types.ARTIST, artists: {
fake: true
}
}
];
let store = mockStore([], expectedActions, done);
store.dispatch(fetchArtist('ho'))
});
});
});
Nhưng dường như lastfm api thực được gọi khi thử nghiệm được chạy ... dữ liệu thực tế được trả về từ lastfm thay so với phản ứng giả nock.
này là tác giả hành động riêng của mình:
export function fetchArtist(search) {
return dispatch => {
return fetch(`http://ws.audioscrobbler.com/2.0/?method=artist.search&artist=${search}&api_key=abc123&format=json&limit=5`)
.then(handleErrors)
.then(response => response.json())
.then(json => { dispatch(ArtistData(searchTerm, json)) })
.catch(handleServerErrors)
}
}
Các khẳng định thất bại vì phản ứng lastfm sống là không giống như câu trả lời tôi hy vọng theo đối tượng expectedActions
..
tôi đã cố gắng gán nock cho một biến và đăng xuất. Nhật ký hiển thị điều này:
Nock dường như thêm cổng 80 vào url, không chắc chắn điều này có gây ra API thực tế không bị giả mạo không:
keyedInterceptors: Object{GET http://ws.audioscrobbler.com:80/2.0/?
method=artist.search&artist=john&api_key=abc123&format=json&limit=5
Bất kỳ ý tưởng nào sai ở đây?
bạn đang chạy này trong nút hoặc trình duyệt? Tôi không tin rằng nock hoạt động trong trình duyệt, chỉ có nút –
Ah ok, đó là vấn đề sau đó, tôi đang chạy các thử nghiệm trên PhantomJs –
Dường như nock không thích tìm nạp trình duyệt https://github.com/node-nock/nock/issues/409. Sẽ thử và chuyển sang chế độ tìm nạp được đề xuất trong thời gian là –