【问题标题】:Mocking a yaml file in jest开玩笑地模拟 yaml 文件
【发布时间】:2018-03-08 22:47:50
【问题描述】:

我有一个 yaml 文件,其中包含一些配置信息,我在要测试的模块中使用它。但是当我测试它时,我想模拟它,所以它只有简化和静态数据,所以很容易测试,如果配置改变了,我不必编辑测试。到目前为止,这是我尝试过的:

// config/index.js

const yaml = require('js-yaml');
const fs = require('fs');
const path = require('path');

const filePath = path.join(__dirname, 'stuff.yaml');

module.exports =
{
    getStuff()
    {
        return yaml.safeLoad(fs.readFileSync(filePath, 'utf8'));
    },
    setStuff(stuff)
    {
        fs.writeFile(filePath, yaml.safeDump(stuff), err => console.log);
    }
}

// test/config.test.js

const config = require("../config")

test('getStuff', () => {
    jest.mock('../config/stuff.yaml')
    expect(config.getStuff()).toEqual({/*..*/});
});

我的文件结构是:

project-root/
├── config/
│   ├── __mocks__/
|       └── stuff.yaml     (the mock file)
│   ├── stuff.yaml     (the real file)
│   └── index.js
└── test/
    └── config.test.js

但是测试仍然从真实文件中返回数据。总而言之,我想在文件系统中模拟一个文本文件,以便任何模块读取它而不是真正的。

注意:我并不关心模拟版本是否在磁盘上,或者我只是将它作为字符串保存在内存中。从测试速度更快的意义上说,将其保存在内存中甚至是有益的。

【问题讨论】:

  • 自己模拟一下岂不是更简单。我意识到这不是你想要的,所以我只是在评论,但是在 JavaScript 中手动模拟非常简单直接......当它只是静态数据时更是如此。

标签: javascript node.js jestjs


【解决方案1】:

您可能可以更新您的 Jest 配置并利用 moduleNameMapper 来处理此问题。

{
  "moduleNameMapper": {
    "config/stuff.yaml": "<rootDir>/config/__mocks__/stuff.yaml"
  }
}

【讨论】:

    【解决方案2】:

    你也可以试试 setMock - https://facebook.github.io/jest/docs/en/jest-object.html#jestsetmockmodulename-moduleexports

    jest.setMock('config/__mocks__/stuff.yaml', require('config/stuff.yaml');

    【讨论】:

      猜你喜欢
      • 2023-03-08
      • 2017-07-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-05
      • 1970-01-01
      • 2021-11-20
      • 2019-03-23
      • 2020-11-18
      相关资源
      最近更新 更多