【问题标题】:cannot override function with jest mock function不能用开玩笑的模拟函数覆盖函数
【发布时间】:2021-12-09 11:17:01
【问题描述】:

我正在为我的一个端点编写一个测试,该端点调用超级账本结构上的链码事务。对于测试,我想重写 invoke 服务来模拟一个事务,这样新事务就不会每次都在结构中实际注册。

代码看起来很简单,但由于某种原因contractsSrv.invoke = jest.fn() 不起作用。每次都会执行原来的invoke

我看到许多其他文章都说要使用 jest.mock('./myModule', () => ({ ...jest.requireActual('./myModule'), otherFn: () => {}}))jest.spyOn 之类的东西。但这也行不通。充其量我能够让模拟函数返回“未定义”。

但除非我遗漏了什么,否则不应该简单的覆盖(如下所示)工作吗?当函数引用被替换为模拟函数的引用时,所有模块都应该缓存在内存中。

我使用的是旧版本的节点:14.13.1,因为它是结构所要求的。因此,还要使用旧版本的 Jest:26.6.3。

'use strict';

require('dotenv').config();
const request = require('supertest');

const contractsSrv = require('../../../services/contracts.srv');
const config = require('config');

let server;
jest.setTimeout(3000);

describe('/api/contracts', () => {
  beforeEach(() => {
    server = require('../../../server');
  });
  afterEach(() => {
    server.close();
  });

  describe('post /', () => {
    it('return transaction record and id', async () => {
      contractsSrv.invoke = jest.fn().mockResolvedValue({
        data: {
          response: 'true',
          txID: config.get('TX_ID'),
        },
      });
   
      const res = await request(server)
        .post('/api/contracts')
        .send({
          field1: '001',
          field2: '002',
        })
        .set('api-token', config.get('TOKEN'));

      expect(res.status).toBe(200);
    });
  });
 
});

【问题讨论】:

    标签: unit-testing jestjs commonjs


    【解决方案1】:

    我能够通过使用不同的方法使其工作。我已经删除了函数覆盖,并在 describe 方法之外做了一个 jest.doMock。

    jest.doMock('../../../services/contracts.srv', () => {
      return {
        invoke: jest.fn().mockResolvedValue({
          data: {
            response: 'true',
            txID: config.get('TX_ID'),
          },
        }),
      };
    });
    

    我仍然不知道为什么简单的覆盖不起作用。我认为它确实适用于旧版本的 jest,所以我认为这与 jest 内部管理模块的方式有关,但我不确定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-01
      • 2023-03-17
      相关资源
      最近更新 更多