Jest: "لم يتم استدعاء رد الاتصال غير المتزامن خلال المهلة المحددة بواسطة Jasmine."

تم إنشاؤها على ٢٣ أغسطس ٢٠١٦  ·  3تعليقات  ·  مصدر: facebook/jest

مرحبا ! أحاول اختبار إجراءات Redux مع Jest ، باستخدام Promises.
وظيفة عملي هي ما يلي:

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 ، وهو أيضًا يخالف المواصفات ..

شكرا لمساعدتك !

التعليق الأكثر فائدة

إضافة هذا التعليق هنا الذي يصف سبب رسالة الخطأ هذه للأشخاص الذين قد يجدون هذه الصفحة في المستقبل.
يحدث ذلك لأن لديك وظيفة إرسال متداخلة في وعدك.

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

تذكر أن الإرسال () غير متزامن ويجب حله. لهذا السبب كنت تحصل على رسالة الخطأ.

ال 3 كومينتر

حصلت على المشكلة ، ولست بحاجة إلى حل الوعد في الوظيفة الوهمية:

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

إضافة هذا التعليق هنا الذي يصف سبب رسالة الخطأ هذه للأشخاص الذين قد يجدون هذه الصفحة في المستقبل.
يحدث ذلك لأن لديك وظيفة إرسال متداخلة في وعدك.

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

تذكر أن الإرسال () غير متزامن ويجب حله. لهذا السبب كنت تحصل على رسالة الخطأ.

أنا هنا فقط للتناغم مع أنني قمت بحل هذا الخطأ باستخدام مكالمة done() .

كنت أختبر إجراء إعادة ، ومن console.log s الذي كنت أستخدمه ، كان من المتوقع أن يتم استدعاء جميع المخرجات ، ومن المفترض أن يتم استدعاء resolve() و dispatch() ضمن عملية رد الاتصال الناجحة لـ a PUT عبر axios .

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات