首页 > 解决方案 > 开玩笑找不到模拟模块

问题描述

我的文件夹结构:

├──wrapper.js 
├──lib
|  └──zwportal.js
├── __tests__
│   └── wrapper.test.js
── __mocks__
│   └── zwportal.js
|

wrapper.js

const portal = require('./lib/zwportal.js')

由于 zwportal.js 非常复杂,所以我使用mocks文件夹中的mock 。所以在我的测试中:

'use strict';
// Mocking dependencies

jest.mock('../lib/zwportal.js');
zwportal = require('../lib/zwportal.js');

但是,当我运行时:

jest

它说:

 FAIL  __tests__/wrapper.test.js
  ● Test suite failed to run

    Cannot find module 'abstract-socket' from 'avro-utils.js'

实际上,这些文件abstract-socketavro-utils,在原始的“非模拟”zwportal.js中。看来 jest 并没有模拟这个文件。为什么?

编辑

在我的测试套件中,如果我写:

jest.mock('../lib/zwportal.js', () => {});
zwportal = require('../lib/zwportal.js');

没有问题发生。但是,我需要用一些行为来模拟模拟。

标签: jestjs

解决方案


手动模拟是通过在紧邻模块的模拟/子目录编写模块来定义的。例如,要在 models 目录中模拟一个名为 user 的模块,请创建一个名为 user.js 的文件并将其放在 models/ mocks目录中。

尝试将mocks目录移动到 lib 目录


推荐阅读