在 Redux 操作中测试副作用
Test side effects in Redux actions
我正在学习此处的 Redux 教程。
在我创建的应用程序中,我有一个具有副作用的操作,就像在调用 Date.now() 的 receivePosts 函数中显示的操作一样。
异步功能完成后会触发副作用。在我自己的应用程序中遵循此异步测试时。我得到的回复如下所示:
actual:
{
type: 'REQUEST_LEAGUE_SUCCESS',
receivedAt: 1453991947254,
league: 'Div 3',
resultsTable: [ [Object], [Object] ]
},
expected:
{
type: 'REQUEST_LEAGUE_SUCCESS',
league: 'Div 3',
receivedAt: 1453991947235,
resultsTable: [ [Object], [Object] ]
}
我的预期操作日期不等于实际操作的日期。在我的预期操作中,我有以下内容:
receivedAt: Date.now()
我的代码结构与 Redux 教程中的代码完全相同,除了我的动作创建器具有此副作用。
我的问题归结为:我如何处理这些副作用以使我的测试通过?
依赖于抓取当前时间的测试代码不是一个好主意。 你需要重写一些东西,以便你可以模拟或注入一个日期。 在(单元测试,如何编写可测试代码及其重要性)中执行此操作的一些很好的例子。该文章基于 C#,但相同的概念适用于此处。
你可以像这样模拟 Date.now() 函数:
describe('>>> Test Name', () => {
const literallyJustNow = Date.now();
const realDateNow = Date.now.bind(global.Date);
const dateNowStub = jest.fn(() => literallyJustNow);
beforeEach(() => {
global.Date.now = dateNowStub;
});
afterEach(() => {
global.Date.now = realDateNow;
});
it('... your tests ...', () => { ... });
});
我认为您需要在测试中建立一些容忍度,因为在调度操作和接收响应之间不可避免地会经过一些时间。即使你伪造了它,执行时间仍然会有差异。您实际如何执行此操作取决于您的断言库。
相关文章:
- 模糊事件的Javascript测试
- 我的单元测试选项是什么
- 测试索引值是否等于某个数字的倍数
- 在localhost Dev Box上测试JSONP请求的最佳方式
- 测试数组中每个项的内容
- 测试Angular Service解决错误回调中的promise
- 使用Jest测试React Native应用程序
- 为函数代码编写测试
- 如何在Angular单元测试中从另一个控制器的rootScope将方法添加到rootScope中
- 如何使用JS/nightwatchjs并行运行多个测试
- 使用量角器的当前url单元测试的getTitle
- 茉莉花宝石-耙茉莉花:ci dons't运行测试
- JavaScript滚动脚本-在测试中激发,而不是在开发站点上
- AngularJS指令单元测试中未定义的函数
- 一个密码测试程序,如果存在空格,它会提醒用户
- 测试角度解析方法
- Protractor:在Iframe中测试非角度应用程序
- 在 Redux 操作中测试副作用
- 余烬集成测试错误.处理异步副作用
- 测试时的余烬错误:您将需要在运行中包装任何带有异步副作用的代码