Hei! Saya mencoba menguji tindakan Redux dengan Jest, menggunakan Promises.
Fungsi tindakan saya adalah sebagai berikut:
export function exportCurrentConfig() {
return function(dispatch, getState) {
const result = postJSON( some_url_im_requesting, {})
.then(data => {
return (dispatch) => {
dispatch({
type: 'GET_EXPORT_ID',
payload: data
})
}
})
return result
}
}
Fungsi postJSON
ini diejek:
// __mocks__/fetch.js
export function postJSON (url, data) {
return new Promise((resolve, reject) => {
process.nextTick(
() => {}
)
})
}
dan kemudian, dalam spesifikasi saya, saya mencoba memeriksa hasil akhir ketika semua janji diselesaikan:
// __tests__/components/exports-actions-test.js
jest.unmock('../')
jest.unmock('../actions')
jest.unmock('redux-mock-store')
jest.unmock('redux-thunk')
import * as actions from '../actions'
import configureMockStore from 'redux-mock-store'
import thunk from 'redux-thunk'
const middlewares = [thunk]
const mockStore = configureMockStore(middlewares)
describe('Dataset actions', () => {
it('exportCurrentConfig - default parameters', () => {
const expectedActions = [{
type: actions.GET_EXPORT_ID
}]
const store = mockStore({})
return store
.dispatch(actions.exportCurrentConfig({}))
.then(() => {
expect(store.getActions()).toEqual(expectedActions)
})
})
})
Fungsi tiruan dipanggil dan mengembalikan janji, tindakan mengembalikan sesuatu, tetapi saya mendapatkan kesalahan ini pada spesifikasi:
Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
(menggunakan babel-jest 14.1.0 dan jest-cli 12.0.2)
EDIT: Juga mencoba mendefinisikan kembali definisi global Promise, dan itu juga melanggar spesifikasi ..
Terima kasih atas bantuan Anda !
Punya masalah, saya harus menyelesaikan janji di fungsi tiruan:
// __mocks__/fetch.js
export function postJSON (url, data) {
return new Promise((resolve, reject) => {
process.nextTick(
() => resolve({})
)
})
}
Menambahkan komentar ini di sini menjelaskan alasan pesan kesalahan ini untuk orang-orang yang mungkin menemukan halaman ini di masa mendatang.
Itu terjadi karena Anda memiliki fungsi pengiriman yang bersarang di dalam janji Anda.
dispatch({
type: 'GET_EXPORT_ID',
payload: data
})
Ingat bahwa dispatch() adalah async dan perlu diselesaikan. Itu sebabnya Anda mendapatkan pesan kesalahan.
Saya di sini hanya untuk berpadu bahwa saya memecahkan kesalahan ini dengan memanfaatkan panggilan done()
.
Saya sedang menguji tindakan redux, dan dari console.log
yang saya gunakan, semua output diharapkan, resolve()
dan dispatch()
diasumsikan dipanggil dalam panggilan balik sukses untuk a PUT
melalui axios
.
Komentar yang paling membantu
Menambahkan komentar ini di sini menjelaskan alasan pesan kesalahan ini untuk orang-orang yang mungkin menemukan halaman ini di masa mendatang.
Itu terjadi karena Anda memiliki fungsi pengiriman yang bersarang di dalam janji Anda.
Ingat bahwa dispatch() adalah async dan perlu diselesaikan. Itu sebabnya Anda mendapatkan pesan kesalahan.