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

模拟函数被调用并返回承诺,动作正在返回一些东西,但我在规范上遇到了这个错误:
Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL. (使用 babel-jest 14.1.0 和 jest-cli 12.0.2)

编辑:还试图重新定义 Promise 的全局定义,它也打破了规范..

谢谢你的帮助 !

最有用的评论

在此处添加此评论,为将来可能会找到此页面的人描述此错误消息的原因。
发生这种情况是因为您的 Promise 中嵌套了一个调度函数。

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

请记住,dispatch() 是异步的,需要解决。 这就是您收到错误消息的原因。

所有3条评论

遇到问题了,我需要解决模拟函数中的承诺:

// __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()在成功回调中被调用PUT通过axios

此页面是否有帮助?
0 / 5 - 0 等级