Jest: Jasmineが指定したタイムアウト内に非同期コールバックが呼び出されませんでした。」

作成日 2016年08月23日  ·  3コメント  ·  ソース: facebook/jest

ちょっと、そこ ! Promisesを使用して、JestでReduxアクションをテストしようとしています。
私のアクション関数は次のとおりです。

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

このpostJSON関数はモックされています:

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

そして、私のスペックでは、すべての約束が解決されたときに最終結果をチェックしようとしています:

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

モック関数が呼び出されてpromiseが返され、アクションが何かを返しますが、仕様でこのエラーが発生します:
Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL. (babel-jest14.1.0およびjest-cli12.0.2を使用)

編集:また、Promiseのグローバル定義を再定義しようとしましたが、これも仕様を破っています。

ご協力いただきありがとうございます !

最も参考になるコメント

将来このページを見つける可能性のある人々のためのこのエラーメッセージの理由を説明するこのコメントをここに追加します。
これは、promise内にディスパッチ関数がネストされているために発生します。

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

dispatch()は非同期であり、解決する必要があることに注意してください。 そのため、エラーメッセージが表示されていました。

全てのコメント3件

問題が発生しました。モック関数のpromiseを解決する必要があります。

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

将来このページを見つける可能性のある人々のためのこのエラーメッセージの理由を説明するこのコメントをここに追加します。
これは、promise内にディスパッチ関数がネストされているために発生します。

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

dispatch()は非同期であり、解決する必要があることに注意してください。 そのため、エラーメッセージが表示されていました。

done()呼び出しを利用してこのエラーを解決したという点で、私はチャイムを鳴らしているところです。

私はreduxアクションをテストしていましたが、使用していたconsole.logから、すべての出力が期待され、 resolve()dispatch()が成功コールバック内で呼び出されたと想定されていました。 axios PUT #$。

このページは役に立ちましたか?
0 / 5 - 0 評価