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의 μ „μ—­ μ •μ˜λ₯Ό μž¬μ •μ˜ν•˜λ €κ³  μ‹œλ„ν–ˆμœΌλ©° 사양도 μœ„λ°˜ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

λ‹Ήμ‹ μ˜ 도움을 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€ !

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ‚˜μ€‘μ— 이 νŽ˜μ΄μ§€λ₯Ό 찾을 수 μžˆλŠ” μ‚¬λžŒλ“€μ„ μœ„ν•΄ 이 였λ₯˜ λ©”μ‹œμ§€μ˜ 이유λ₯Ό μ„€λͺ…ν•˜λŠ” 이 주석을 여기에 μΆ”κ°€ν•©λ‹ˆλ‹€.
그것은 당신이 λ‹Ήμ‹ μ˜ 약속 μ•ˆμ— λ‚΄ν¬λœ λ””μŠ€νŒ¨μΉ˜ ν•¨μˆ˜λ₯Ό 가지고 있기 λ•Œλ¬Έμ— λ°œμƒν•©λ‹ˆλ‹€.

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

λ‚˜μ€‘μ— 이 νŽ˜μ΄μ§€λ₯Ό 찾을 수 μžˆλŠ” μ‚¬λžŒλ“€μ„ μœ„ν•΄ 이 였λ₯˜ λ©”μ‹œμ§€μ˜ 이유λ₯Ό μ„€λͺ…ν•˜λŠ” 이 주석을 여기에 μΆ”κ°€ν•©λ‹ˆλ‹€.
그것은 당신이 λ‹Ήμ‹ μ˜ 약속 μ•ˆμ— λ‚΄ν¬λœ λ””μŠ€νŒ¨μΉ˜ ν•¨μˆ˜λ₯Ό 가지고 있기 λ•Œλ¬Έμ— λ°œμƒν•©λ‹ˆλ‹€.

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

dispatch()λŠ” 비동기식이며 ν•΄κ²°λ˜μ–΄μ•Ό 함을 κΈ°μ–΅ν•˜μ‹­μ‹œμ˜€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 였λ₯˜ λ©”μ‹œμ§€κ°€ ν‘œμ‹œλ©λ‹ˆλ‹€.

μ €λŠ” done() ν˜ΈμΆœμ„ ν™œμš©ν•˜μ—¬ 이 였λ₯˜λ₯Ό ν•΄κ²°ν–ˆλ‹€λŠ” μ μ—μ„œ μ°¨μž„μ„ ν•˜κΈ° μœ„ν•΄ μ™”μŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” redux μž‘μ—…μ„ ν…ŒμŠ€νŠΈν•˜κ³  μžˆμ—ˆκ³  λ‚΄κ°€ μ‚¬μš©ν•˜κ³  있던 console.log μ—μ„œ λͺ¨λ“  좜λ ₯이 μ˜ˆμƒλ˜μ—ˆκ³  resolve() 및 dispatch() κ°€ 성곡 콜백 λ‚΄μ—μ„œ ν˜ΈμΆœλ˜μ—ˆλ‹€κ³  κ°€μ •ν–ˆμŠ΅λ‹ˆλ‹€. PUT λ₯Ό ν†΅ν•œ axios .

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰