gpt4 book ai didi

unit-testing - redux-saga 单元测试意外失败

转载 作者:行者123 更新时间:2023-12-01 03:19:50 25 4
gpt4 key购买 nike

我们有一个这样的函数:

export function* postPermitApplicationRequest() {
try {
const uris = yield select(state => getUris(state));

.... (more yields hereafter)

我们用 Jest 和 Chai 测试这个函数如下:
...
const action = { type: Action.POST_PERMIT_APPLICATION };
const generator = postPermitApplicationRequest(action);

it('must select uris from state', () => {
const nextCall = generator.next().value;
const uris = select(state => getUris(state));
expect(nextCall).to.deep.equal(uris);
});

但是期望失败:
AssertionError: expected { Object (@@redux-saga/IO, SELECT) } to deeply equal { Object (@@redux-saga/IO, SELECT) }

at Assertion.assertEqual (node_modules/chai/lib/chai/core/assertions.js:485:19)
at Assertion.ctx.(anonymous function) [as equal] (node_modules/chai/lib/chai/utils/addMethod.js:41:25)
at Object.<anonymous> (src/app/pa/PermitApplicationServiceSagas.test.js:20:43)
at process._tickCallback (internal/process/next_tick.js:109:7)

这两个对象看起来都像:
{ '@@redux-saga/IO': true,
SELECT: { selector: [Function], args: [] } }

但是选择器的功能是不同的。 generator.next() 的结果包含代码覆盖跳过提示:
function (state) {/* istanbul ignore next */cov_zrpq42gyn.f[12]++;cov_zrpq42gyn.s[19]++;return (/* istanbul ignore next */(0, _Selectors.getUris)(state));}

而原始功能没有:
function (state) {return (0, _Selectors.getUris)(state);}

看起来 generator.next() 添加了这些提示并且断言失败

我们在这里做错了什么?

我们使用 redux-saga 0.14.8

最佳答案

测试失败是因为在您的传奇和测试中,您每次执行代码时都会创建一个新函数。这两个函数将进行比较,但不是同一个实例。

您可以简单地使用 select(getUris)在您的传奇和您的测试中,因为两者都将引用相同的函数。

你的传奇:

export function* postPermitApplicationRequest() {
try {
const uris = yield select(getUris);

.... (more yields hereafter)

你的测试:
...
const action = { type: Action.POST_PERMIT_APPLICATION };
const generator = postPermitApplicationRequest(action);

it('must select uris from state', () => {
const nextCall = generator.next().value;
const uris = select(getUris);
expect(nextCall).to.deep.equal(uris);
});

关于unit-testing - redux-saga 单元测试意外失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46363673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com