Jest: "Panggilan balik async tidak dipanggil dalam batas waktu yang ditentukan oleh Jasmine."

Dibuat pada 23 Agu 2016  ·  3Komentar  ·  Sumber: facebook/jest

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 !

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.

      dispatch({
          type: 'GET_EXPORT_ID',
           payload: data
       })

Ingat bahwa dispatch() adalah async dan perlu diselesaikan. Itu sebabnya Anda mendapatkan pesan kesalahan.

Semua 3 komentar

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 .

Apakah halaman ini membantu?
0 / 5 - 0 peringkat