2017-08-15 19 views
8

Tôi đang học cách kiểm tra và sử dụng một số ví dụ làm hướng dẫn mà tôi đang cố gắng giả lập một bài đăng nhập. Ví dụ được sử dụng tìm nạp cho cuộc gọi http nhưng tôi sử dụng các trục. Đây là lỗi Tôi nhậncách kiểm tra các trục phản ứng-saga post

Timeout - async gọi lại không được gọi trong thời gian chờ quy định của jasmine.DEFAULT_TIMEOUT_INTERVAL

Tất cả các câu trả lời cho lỗi này phải làm với lấy, làm thế nào để tôi làm này với 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

01.
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

bạn có làm cách nào để máy phát điện hoạt động? – JoseAPL

+0

lần đầu tiên sử dụng chúng để vẫn học hỏi – texas697

Trả lời

1

Bạn nhận được lỗi sau: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL vì bạn không gọi số gọi lại done trong thử nghiệm của mình.

+0

bạn có thể cho biết ý của bạn không? – texas697

+0

chỉ cần thêm setTimeout này (() => done(), 200) – texas697

+0

câu trả lời này có giải quyết được vấn đề không? Nó không rõ ràng nơi bạn có nghĩa vụ phải gọi thực hiện(). Gọi cách này có thể trở lại sớm được thực hiện(). – 82Tuskers

1

Vì bạn có specified a body ({ userName: '[email protected]', password: 'xxxxx' }) trong nock mocking của bạn, nó sẽ không đáp ứng loginReply cho đến khi nó được yêu cầu bài với cả URL nhất định và cơ thể. Nhưng bạn không gửi credentials với hành động LOGIN_REQUEST của mình và do đó yêu cầu trục của bạn (payload.data) luôn bị trống. Đó là lý do tại sao việc bỏ nhóm nock không trả lời trong thời gian chờ không đồng bộ được chỉ định và jest cung cấp lỗi thời gian chờ này.

Để khắc phục điều này, bạn phải xóa nội dung được chỉ định trong thiết lập thiết lập hoặc gửi LOGIN_REQUEST hành động bằng thông tin xác thực và thay đổi nội dung được chỉ định để khớp với thông tin đăng nhập được mã hóa mà bạn đã đặt thành payload.

+0

Tôi đã xóa thông tin đăng nhập khỏi nút nhưng vẫn gặp lỗi tương tự – texas697

Các vấn đề liên quan