2017-08-15 26 views
8

Bazı örnekler nasıl test edileceğini ve nasıl kullanacağımı bir kılavuz olarak anlamaya çalışıyorum. Örnek, http araması için getirdi, ancak aksiyomları kullanıyorum. Bu benimtepki-saga aksiyomları test etmek için nasıl

Zaman Aşımı alıyorum hatadır - zaman uyumsuz geri arama bu hataya yanıtların hepsi

jasmine.DEFAULT_TIMEOUT_INTERVAL

tarafından belirtilen zaman aralığı içinde çağrılan değildi ben nasıl yapacağım getirme ile yapmak zorunda AXIOS

./saga

const encoder = credentials => Object.keys(credentials).map(key => `${encodeURIComponent(key)}=${encodeURIComponent(credentials[key])}`).join('&') 

const postLogin = credentials => { 
    credentials.grant_type = 'password' 
    const payload = { 
    method: 'post', 
    headers: config.LOGIN_HEADERS, 
    data: encoder(credentials), 
    url: `${config.IDENTITY_URL}/Token` 
    } 
    return axios(payload) 
} 

function * loginRequest (action) { 
    try { 
    const res = yield call(postLogin, action.credentials) 
    utils.storeSessionData(res.data) 
    yield put({ type: types.LOGIN_SUCCESS, data: res.data }) 
    } catch (err) { 
    yield put({ type: types.LOGIN_FAILURE, err }) 
    } 
} 

function * loginSaga() { 
    yield takeLatest(types.LOGIN_REQUEST, loginRequest) 
} 

export default loginSaga 

./login-test

ile bu Eğer nock alaycı specified a body ( { userName: '[email protected]', password: 'xxxxx' }) olmadığından dolayı verilen URL ve vücudun her ikisi ile bir post isteği gelene kadar
const loginReply = { 
    isAuthenticating: false, 
    isAuthenticated: true, 
    email: '[email protected]', 
    token: 'access-token', 
    userId: '1234F56', 
    name: 'Jane Doe', 
    title: 'Tester', 
    phoneNumber: '123-456-7890', 
    picture: 'pic-url', 
    marketIds: [1, 2, 3] 
} 

describe('login-saga',() => { 
    it('login identity user', async (done) => { 
    // Setup Nock 
    nock(config.IDENTITY_URL) 
     .post('/Token', { userName: '[email protected]', password: 'xxxxx' }) 
     .reply(200, loginReply) 

    // Start up the saga tester 
    const sagaTester = new SagaTester({}) 

    sagaTester.start(loginSaga) 

    // Dispatch the event to start the saga 
    sagaTester.dispatch({type: types.LOGIN_REQUEST}) 

    // Hook into the success action 
    await sagaTester.waitFor(types.LOGIN_SUCCESS) 

    // Check the resulting action 
    expect(sagaTester.getLatestCalledAction()).to.deep.equal({ 
     type: types.LOGIN_SUCCESS, 
     payload: loginReply 
    }) 
    }) 
}) 
+0

Jeneratörler nasıl çalışır? – JoseAPL

+0

ilk kez onları kullanarak hala öğrenme – texas697

cevap

1

Aşağıdaki hata iletisini aldınız: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL, sınamada done geri aramayı çağırmadınız.

+0

Ne demek istediğini gösterebilir misin? – texas697

+0

ekledik bu setTimeout (() => done(), 200) – texas697

+0

bu cevap sorunu çözdü mü? Yapmanız gereken yerde net değil(). Bu şekilde çağrıldığında erken geri dönüş yapılabilir(). – 82Tuskers

1

, bu loginReply yanıt vermez. Ancak, credentials'u LOGIN_REQUEST eyleminizle göndermezsiniz ve bu nedenle aksiyeriniz (payload.data) her zaman boş olacaktır. Bu nedenle, nock alayınızın belirtilen zaman uyumsuzluğu içinde yanıt vermemesi ve jest bu zaman aşımı hatasını verir.

sizin nock kurulumunda belirtilen cismi çıkarmak için var ya bu düzeltmek veya kimlik bilgileriyle LOGIN_REQUEST eylemi sevk ve payload ayarlı kodlanmış kimlik bilgilerini eşleştirmek için belirtilen vücudu değiştirin.

+0

Nock gelen kimlik bilgileri kaldırıldı ama hala aynı hata alıyorsunuz – texas697

İlgili konular