V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
yazoox
V2EX  ›  JavaScript

请教一下,使用 jest 的写测试的时候,怎么 mock 掉一个 module 里面的 generator 函数?

  •  
  •   yazoox · 2021-10-09 18:14:57 +08:00 · 1364 次点击
    这是一个创建于 1176 天前的主题,其中的信息可能已经有所发展或是发生改变。
    // module1.js
    export function a() {
      yield 1;
      yield 2;
      // blabla...
    }
    
    // module2.js
    export function b() {
      dispatch(createActionForA()); // redux 发送一个消息,redux-saga 会把这个消息转到对应的 saga 函数,比如 a()。
    }
    

    然后

    // test.js
    jest.mock("../../saga/moduel1", () => {
      const actual = jest.requireActual("../../saga/module1");
      return {
        ...actual,
        a: jest.fn() // 这样写是不能工作的
        })
      };
    });
    

    但,现在,我在测试 b 的时候,我想把 a mock 掉。上面这个方法,我用来 mock 一般的 module,都能够正常工作。但 generator 不行。

    请教一下大神,有没有好的方法?

    另,我也想过,监听或者 mock redux 里面的 action 和 action 方法貌似也不方便。

    2 条回复    2021-10-10 00:28:15 +08:00
    seki
        1
    seki  
       2021-10-09 19:04:54 +08:00
    不能工作是什么错误?
    generator 函数返回的是 generator 对象,你直接 jest.fn() 运行起来有错误也是正常现象吧,如果你要 mock,就让 mock 函数也返回同样的对象
    CokeMine
        2
    CokeMine  
       2021-10-10 00:28:15 +08:00 via iPad
    同楼上。jest.fn() 默认调用返回 undefined 如果对 undefined 调用 next 肯定会报错吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2822 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:13 · PVG 21:13 · LAX 05:13 · JFK 08:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.