db9*_*998 6 unit-testing firebase reactjs jestjs redux
我正在使用React,Redux和Firebase进行POC.我目前正在研究如何测试动作创作者.我跟着这个- https://redux.js.org/recipes/writing-tests#async-action-creators指南,它已经有用至今.但是,作为一个简单的示例,我想测试在使用Firebase成功进行身份验证后调度操作,如此 -
行动创造者
export const authenticate = (username, password) => {
return dispatch => {
firebase.auth().signInWithEmailAndPassword(username, password)
.then(() => {
dispatch(authenticationSuccessful())
})
.catch(() => {
});
}
};
Run Code Online (Sandbox Code Playgroud)
行动
const authenticationSuccessful = () => {
return {
type: actionTypes.AUTHENTICATION_SUCCESSFUL
};
};
Run Code Online (Sandbox Code Playgroud)
对于测试方面我喜欢的东西,redux-mock-store和expect.我已经研究过其他人在这个场景中使用了什么,我还没有找到明确的答案,我也看过https://www.npmjs.com/package/firebase-mock但是我没有知道这是否是社区内的热门选择.
真的很感激任何提前帮助!
这个答案符合要求 使用 Jest 对依赖于 http 调用的代码进行单元测试的最佳方法?
根据该答案,这将覆盖signInWithEmailAndPassword允许您的代码通过而不命中 firebase 的规则。下面的示例可能需要一些调整。不确定 的范围dispatch。
jest.mock('pathToFireBase', () => ({
signInWithEmailAndPassword(email, password) {
return Promise.resolve({name: 'someUser'})
}
}))
const dispatch = jest.fn();
firebase.auth().signInWithEmailAndPassword(username, password)
expect(dispatch.mock.calls.length).toBe(1);
Run Code Online (Sandbox Code Playgroud)
另一种选择(对于 Node.js)是使用VCR之类的东西。一个选项是棕褐色。它由 LinkedIn 构建,因此可能得到更好的维护和测试。使用此工具,您可以记录您的请求一次,保存响应,并在调用时重播。此选项避免了模拟,但通过预定义的响应使 uint 测试保持快速。不过我不知道有这样的前端选项。
Firebasemock 看起来是一个不错的选择。虽然我看不到signInWithEmailAndPassword. 身份验证是通过显式设置状态来完成的。身份验证示例。
mocksdk.auth().changeAuthState({
uid: 'testUid',
provider: 'custom',
token: 'authToken',
expires: Math.floor(new Date() / 1000) + 24 * 60 * 60,
auth: {
isAdmin: true
}
});
mocksdk.auth().flush();
console.assert(document.location.href === '#/admin', 'redirected to admin');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
811 次 |
| 最近记录: |