如何模拟尚不存在的节点模块?

Posted

技术标签:

【中文标题】如何模拟尚不存在的节点模块?【英文标题】:How to mock a node module that doesn't exist yet? 【发布时间】:2019-12-04 06:28:51 【问题描述】:

no-such-module.ts

declare module 'no-such-module' 
    export function sum(a: number, b: number): number;

sum.ts

import  sum  from 'no-such-module';

export const func = (a: number, b: number) => sum(a, b);

sample.test.ts

jest.mock('no-such-module');
const  sum  = require('no-such-module');

sum.mockImplementation((a,b) => a+b);

describe('sample test', () => 
    it('should pass', () => 
        expect(sum(1, 2)).toBe(3);
    );
);

错误

Cannot find module 'no-such-module' from 'sample.test.ts'

    > 1 | jest.mock('no-such-module');
        |      ^
      2 | const  sum  = require('no-such-module');
      3 | 
      4 | sum.mockImplementation((a,b) => a+b);

是否可以模拟一个尚不存在的节点模块?我在 ts 文件中声明了 no-such-module。我正在尝试从模块中模拟一个函数。

【问题讨论】:

【参考方案1】:
jest.mock('no-such-module', () => 
    return 
        sum: (a,b) => a+b
    ;
,  virtual: true );

const  sum  = require('no-such-module');

我们需要将选项 virtual: true 传递给 jest.mock()

【讨论】:

有没有办法在每个 out 测试中覆盖“sum”的实现。因为大多数时候我们想为每个测试测试不同的场景

以上是关于如何模拟尚不存在的节点模块?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用添加查询添加表中尚不存在的记录

如何将值附加到尚不存在的键?

当 DLQ 尚不存在时,如何通过 Terraform 配置 SQS?

Type int[] 如何实现尚不存在的接口(对我而言)?

仅当复合主键尚不存在时,如何批量插入行? [AWS 红移]

仅当复合主键尚不存在时,如何批量插入行?