首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用jest框架模拟基类

使用jest框架模拟基类
EN

Stack Overflow用户
提问于 2020-01-10 23:42:33
回答 1查看 273关注 0票数 0

我有一个基类,如下所示。

代码语言:javascript
复制
class BaseClass {
  .....
  .....
  async request(options) {
    .......
    .......
  }
}

这是由另一个类似这样的类扩展的。

代码语言:javascript
复制
const BaseClass = require('@myorg/base-class').BaseClass;

class MyClass extends BaseClass {

      async method1() {
        .............
        request()
        .............
      }

      async method2() {
        .............
        request()
        .............
      }

}

现在,我使用jest测试MyClass及其两个方法,模拟BaseClass,并尝试为它的请求方法发送模拟的响应。因为我需要测试method1和method2,所以我需要在第一个之后更改模拟返回。我是这样做的。

代码语言:javascript
复制
describe('MyClass', () => {
  afterEach(() => {
    jest.clearAllMocks();
    jest.resetAllMocks();
  });
  let MockClass = class BaseClass {
    request() {
      return {
        statusCode: 200,
        body: JSON.stringify({
          first_response: 'first_response'
        })
      };
    }
  };
  const mock = jest.mock('@myorg/base-class', () => {
    return {
      BaseClass: MockClass
    };
  });
  it('#method1 - test method one', async () => {
    const myClass = require('../src').myClass;
    const res = await myClass.method1();
    expect(res).toEqual('first_response');
  });

  it('#method2 - test method 2', async () => {
    mock.clearAllMocks();
    mock.resetAllMocks();
    MockClass = class BaseClass {
      request() {
        return {
          statusCode: 200,
          body: JSON.stringify({
            random_response: 'random_response'
          })
        };
      }
    };
    const myClass = require('../src').myClass;
    const res = await myClass.method2();
    expect(JSON.parse(res.body)).toEqual({
      random_response: 'random_response'
    });
    expect(res.statusCode).toEqual(200);
  });
});

问题是,一旦mock被初始化,我就不能像在第二个测试中那样重置和分配不同的值。我怎样才能做到这一点呢?

EN

回答 1

Stack Overflow用户

发布于 2020-01-11 03:00:11

一年前我也遇到过类似的问题。我有两个测试调用相同的模拟方法,但我希望有两个不同的输出。

Jest没有提供任何合适的方法来修改创建的mock,我想他们也没有改变这一点。(无法链接任何来源,对不起,这是一段时间之前)。

我有机会与一些经验丰富、才华横溢的程序员讨论,解决办法是在两个不同的文件中进行测试,其中有两个模拟实现。

如果你经常遇到这个问题,那就很简单,很干净,但如果你必须经常这样做,那就不方便了。

如果您有更好的解决办法或解决方法,请让我知道!

祝好运

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59684793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档