redux Saga 测试案例给出了这个问题

cu6pst1q  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(136)

所以我在我的 Saga 文件中有这个函数

export default function* rootSaga ()
{
  yield all ([
    
      testfunction(),
  ])
}

为此,我为这个函数写了这个案例,

it ("SagaRoot",() => {
   const generator = rootSaga ();
   const testfunction = jest.fn();
  
   expect (generator.next.value).toEqual(all([testfunction]));
  })

我在这里犯了错误

expected - [Function mockConstructor],
received  + GeneratorFunctionPrototype {},

在这里能做些什么呢?
谢谢

cbwuti44

cbwuti441#

  • “redux-saga”:“^1.1.3”*

您的代码中存在一些问题。
1.特效创建者all([...effects])接受特效作为它的参数,而不是普通的JS函数。
1.你不需要创建一个mock函数,只需使用原始的testFunction即可。逐步测试 Saga 发生器功能不会运行testFunction。 Saga generator函数只产生效果,而不是testFunction的返回值。

  1. next()是一个方法,而不是属性。
    例如
    saga.ts
import { all, call } from "redux-saga/effects";

export const testfunction = () => 'test'

export default function* rootSaga() {
  yield all([
    call(testfunction),
  ])
}

saga.test.ts

import { all, call } from "redux-saga/effects";
import rootSaga, { testfunction } from "./saga";

it("SagaRoot", () => {
  const generator = rootSaga();
  expect(generator.next().value).toEqual(all([call(testfunction)]));
  expect(generator.next().value).toEqual(undefined);
})

测试结果:

PASS   redux-saga-examples  packages/redux-saga-examples/src/stackoverflow/76481662/saga.test.ts
  ✓ SagaRoot (3 ms)

----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------|---------|----------|---------|---------|-------------------
All files |   83.33 |      100 |      50 |     100 |                   
 saga.ts  |   83.33 |      100 |      50 |     100 |                   
----------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        2.202 s

相关问题