μλ
νμΈμ! 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μ μ μ μ μλ₯Ό μ¬μ μνλ €κ³ μλνμΌλ©° μ¬μλ μλ°νκ³ μμ΅λλ€.
λΉμ μ λμμ μ£Όμ μ κ°μ¬ν©λλ€ !
λ¬Έμ κ° μμ΅λλ€. λͺ¨μ ν¨μμμ μ½μμ ν΄κ²°ν΄μΌ ν©λλ€.
// __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
.
κ°μ₯ μ μ©ν λκΈ
λμ€μ μ΄ νμ΄μ§λ₯Ό μ°Ύμ μ μλ μ¬λλ€μ μν΄ μ΄ μ€λ₯ λ©μμ§μ μ΄μ λ₯Ό μ€λͺ νλ μ΄ μ£Όμμ μ¬κΈ°μ μΆκ°ν©λλ€.
κ·Έκ²μ λΉμ μ΄ λΉμ μ μ½μ μμ λ΄ν¬λ λμ€ν¨μΉ ν¨μλ₯Ό κ°μ§κ³ μκΈ° λλ¬Έμ λ°μν©λλ€.
dispatch()λ λΉλκΈ°μμ΄λ©° ν΄κ²°λμ΄μΌ ν¨μ κΈ°μ΅νμμμ€. κ·Έλ κΈ° λλ¬Έμ μ€λ₯ λ©μμ§κ° νμλ©λλ€.