【问题标题】:Mock object in jest with eslint用 eslint 开玩笑地模拟对象
【发布时间】:2021-07-03 12:53:09
【问题描述】:

假设我有以下代码

export function myFunction(user) {
    return transform(user);
)

我创建了一个 __tests__ 文件夹,并在其中创建了一个带有 user.mock.ts

__mocks__ 文件夹

export const user = { id: 1, name: "John" } 

现在在我的__test__ 文件夹中,我有 user.spec.ts

import { user } from './__mocks__/user.mock';

describe('user', () => {
  it('should map user correctly', () => {
    const expected = { id: 1, name: "John" } 
    const result = myFunction(user);
    expect(result).toEqual(expected);
  });
});

我有以下 eslintrc

{
  "parser": "@typescript-eslint/parser",
  "plugins": [
    "@typescript-eslint",
    "eslint-plugin-jest"
  ],
  "extends": [
    "eslint:recommended",
    "plugin:@typescript-eslint/recommended",
    "prettier/@typescript-eslint",
    "prettier",
    "plugin:jest/recommended"
  ],
  "rules": {
  }
}

我收到以下错误

不应从 mocks 目录手动导入 Mocks。而是使用jest.mock 并从原始模块导入 path.eslintjest/no-mocks-import

【问题讨论】:

  • 为什么是mock?那似乎是静态测试数据,实现没有导入它。

标签: node.js typescript unit-testing jestjs eslint


【解决方案1】:

使用名为__mocks__ 的特殊命名目录的机制是一种能够自动检测包模拟的方式(而不是放置您计划显式运行的代码的地方)。

您永远不会在代码中明确导入此文件夹中的文件作为测试的一部分。

因此,如果您只是为您的案例使用普通文件夹名称,并且不与开玩笑的约定交叉连接,那么您应该能够消除错误。

相比之下,如果你想实际模拟一个现有的包(比如用你自己的fetch 版本替换fetch),那么请参阅https://jestjs.io/docs/manual-mocks#mocking-node-modules 了解如何构造一个文件,例如调用__mocks__/fetch.ts 将 fetch 的真正实现替换为伪造其行为的实现。这是唯一应该使用特别命名的目录的东西。

【讨论】:

  • 知道了。谢谢!
猜你喜欢
  • 2020-08-20
  • 2018-10-23
  • 2017-07-01
  • 1970-01-01
  • 2019-12-21
  • 2018-12-30
  • 2023-03-08
  • 1970-01-01
  • 2020-03-05
相关资源
最近更新 更多