应该模拟模块吗?

huangapple go评论68阅读模式
英文:

Should I mock module?

问题

我正在使用Jest为一段代码编写测试。我正在测试一个名为Inquirer的模块,这是一个与用户交互的CLI工具,在这种情况下主要用于存储用户输入的值(项目是一个文本冒险游戏)。

有人能解释一下我是否需要以jest.mock()来模拟这个库,或者为什么我应该这样做吗?这不会影响测试的结果,甚至不会影响测试的完成时间。

const inquirer = require('inquirer');
jest.mock('inquirer');

test('user input with bob', async () => {
    expect.assertions(1);
    inquirer.prompt = jest.fn().mockResolvedValue({ userInput: 'bob' });
    
    await expect(name()).resolves.toEqual('bob');
})
英文:

I'm writing tests for a piece of code using Jest. I'm testing a module called Inquirer, a CLI tool to interact with the user and mainly in this case to store values from the user (project is a text based adventure game).

Could anyone explain to me if I need to or why I should mock the library itself with jest.mock()? It does not affect the test's outcome or even the time taken to complete the tests.

const inquirer = require('inquirer')
jest.mock('inquirer')

 test('user input with bob', async () => {
        expect.assertions(1)
        inquirer.prompt = jest.fn().mockResolvedValue({ userInput: 'bob' })
        
        await expect(name()).resolves.toEqual('bob')
    })

答案1

得分: 1

当你执行 jest.mock('inquirer') 时,jest 会模拟 inquirer 的所有方法。

所以现在 inquirer.prompt 已经是一个模拟函数了。

因此,你不需要再为它分配另一个模拟函数。在测试中,你可以这样做:

inquirer.prompt.mockResolvedValue({ userInput: 'bob' });
英文:

When you do jest.mock('inquirer'), jest will mock all the methods of inquirer.

So now inquirer.prompt is already a mock function.

So, you don't need to assign another mock function to it. Within the test, you can do something like this:

inquirer.prompt.mockResolvedValue({ userInput: 'bob' });

huangapple
  • 本文由 发表于 2023年3月4日 00:13:19
  • 转载请务必保留本文链接:https://go.coder-hub.com/75629452.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定