簡體   English   中英

在開玩笑中模擬一個yaml文件

[英]Mocking a yaml file in jest

我有一個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

但測試仍然返回真實文件中的數據。 總結一下,我想在文件系統中模擬一個文本文件,這樣任何模塊都可以讀取它而不是真實文件。

注意:我真的不在乎模擬版本是否在磁盤上,或者我只是將它作為內存中的字符串。 將它放在內存中甚至可以在測試更快的意義上有益。

您可以更新您的Jest配置並利用moduleNameMapper來處理這個問題。

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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM