Jest: "Der asynchrone Rückruf wurde nicht innerhalb des von Jasmine angegebenen Zeitlimits aufgerufen."

Erstellt am 23. Aug. 2016  ·  3Kommentare  ·  Quelle: facebook/jest

Sie da ! Ich versuche, Redux-Aktionen mit Jest zu testen, indem ich Promises verwende.
Meine Aktionsfunktion ist die folgende:

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
    }
}

Diese postJSON -Funktion wird verspottet:

// __mocks__/fetch.js
export function postJSON (url, data) {
    return new Promise((resolve, reject) => {
        process.nextTick(
            () => {}
        )
    })
}

und dann versuche ich in meinen Spezifikationen, das Endergebnis zu überprüfen, wenn alle Versprechungen gelöst sind:

// __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)
            })
    })
})

Die Scheinfunktion wird aufgerufen und gibt das Versprechen zurück, die Aktion gibt etwas zurück, aber ich erhalte diesen Fehler in den Spezifikationen:
Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL. (unter Verwendung von babel-jest 14.1.0 und jest-cli 12.0.2)

BEARBEITEN: Auch versucht, die globale Definition von Promise neu zu definieren, und es bricht auch die Spezifikationen.

Danke für Ihre Hilfe !

Hilfreichster Kommentar

Fügen Sie diesen Kommentar hier hinzu, der den Grund für diese Fehlermeldung für Personen beschreibt, die diese Seite möglicherweise in Zukunft finden.
Das passiert, weil Sie eine Dispatch-Funktion in Ihr Versprechen eingebettet haben.

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

Denken Sie daran, dass dispatch() asynchron ist und aufgelöst werden muss. Deshalb hast du die Fehlermeldung bekommen.

Alle 3 Kommentare

Habe das Problem, ich muss das Versprechen in der Mock-Funktion lösen:

// __mocks__/fetch.js
export function postJSON (url, data) {
    return new Promise((resolve, reject) => {
        process.nextTick(
            () => resolve({})
        )
    })
}

Fügen Sie diesen Kommentar hier hinzu, der den Grund für diese Fehlermeldung für Personen beschreibt, die diese Seite möglicherweise in Zukunft finden.
Das passiert, weil Sie eine Dispatch-Funktion in Ihr Versprechen eingebettet haben.

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

Denken Sie daran, dass dispatch() asynchron ist und aufgelöst werden muss. Deshalb hast du die Fehlermeldung bekommen.

Ich bin nur hier, um mich anzumelden, dass ich diesen Fehler mit dem done() -Aufruf gelöst habe.

Ich habe eine Redux-Aktion getestet, und von den von mir verwendeten console.log s wurden alle Ausgaben erwartet, die resolve() und dispatch() wurden vermutlich innerhalb des Erfolgsrückrufs aufgerufen ein PUT über axios .

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

jardakotesovec picture jardakotesovec  ·  3Kommentare

nsand picture nsand  ·  3Kommentare

excitement-engineer picture excitement-engineer  ·  3Kommentare

kentor picture kentor  ·  3Kommentare

stephenlautier picture stephenlautier  ·  3Kommentare