问题
在redux-saga
中,我使用的是yield delay(1000);
。在单元测试中,我使用的是expect(generator.next().value).toEqual(delay(1000));
。
我希望考试能通过。
这是我的sagas.js
:
import { delay } from 'redux-saga';
export function* incrementAsync() {
yield delay(1000);
}
这是我的sagas.test.js
import { delay } from 'redux-saga';
import { incrementAsync } from '../sagas';
describe('incrementAsync Saga test', () => {
it('should incrementAsync', () => {
const generator = incrementAsync();
expect(generator.next().value).toEqual(delay(1000));
});
});
·incrementAsync Saga 测试›应递增异步。
expect(received).toEqual(expected)
Expected value to equal:
{"@@redux-saga/CANCEL_PROMISE": [Function anonymous]}
Received:
{"@@redux-saga/CANCEL_PROMISE": [Function anonymous]}
Difference:
Compared values have no visual difference.
个问题
我如何测试redux-saga****延迟?
3条答案
按热度按时间bvjxkvbb1#
测试Redux Saga 调用的一个好方法是使用
call
效果。在这种情况下,你可以稍微重构你的saga,如下所示:然后,您可以像这样测试:
这是因为对
call
的yield结果是一个简单的对象,描述了对delay
函数的调用。当然还有
redux-saga-test-plan
辅助库,使用它,您的测试将变成如下所示:b1uwtaje2#
如果你检查
delay
Saga 效果代码,你可以看到它是一个绑定函数:因此,如果您在两个不同的模块中导入
delay
,则将是两个不同的函数,没有视觉差异。您可以在代码和框示例中检查这一点(参见测试选项卡):
结果为:
为了测试你的 Saga 故事,你应该模拟你的
delay
效果(如果你使用的是Jest);3ks5zfa03#
如果任何人在使用
redux-saga-test-plan
软件包时遇到以下问题。不要写“yield call(delay,600)”,这里的delay是来自“redux-saga/effects”的效果,你应该写“yield delay(600)”
您应该这样做:
saga.ts
:saga.test.ts
:检测结果:
软件包版本: