【问题标题】:Automatically replace imports in jest开玩笑地自动替换导入
【发布时间】:2021-06-26 17:20:40
【问题描述】:

我正在尝试为更复杂的应用设置测试平台。我们有一个问题,我们的应用程序想要调用需要模拟的后端代码以保持测试台的快速运行。因此我们每个模块有两个文件:

connector.tsconnector.mocked.ts 第一个包含“实时”代码,第二个包含一些模拟/虚拟实现。在我们的模块中,我们只需这样做即可导入它们

import {...} from './connector.ts'

这将直接在我们的应用程序中执行,或者在故事书中将被重写为connector.mocked.ts。在 Storybook 中,这发生在全局配置中:

module.exports = {
  ...
  webpackFinal: (config) => {
    ...
    config.resolve.alias = {
      ...config.resolve.alias,
      './connector': './connector.mocked',
      '@': path.resolve(__dirname, '..'),
    }
  }
}

Jest 中的等价物是什么?我不想为每个测试都写这个,因为被测单元可能不直接使用任何连接器,但可能依赖于使用它们自己的连接器的其他模块(例如,使用菜单的模式视图,它使用检查是否应显示调用后端并被模拟的菜单条目的函数)

我开玩笑地发现了一个名为moduleNameMapper 的东西,但我不知道如何使用它。这是正确的方法吗?如何调试?

我当前的 Jest-Config:

module.exports = {
    preset: 'ts-jest',
    testEnvironment: 'jsdom',
    testPathIgnorePatterns: ['jest-setup.spec.ts'],
    moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],
    moduleNameMapper: {
        '@/(.*)$': '<rootDir>/$1',
        // '.\\/connector': './connector.mocked.ts', // does not work
    },
    setupFilesAfterEnv: ['<rootDir>/jest-setup.spec.ts'],
};

【问题讨论】:

    标签: node.js typescript jestjs node-modules ts-jest


    【解决方案1】:

    您需要交换moduleNameMapper 中的密钥顺序。所以它变成了这样:

    moduleNameMapper: {
        '@/(.*)connector(.ts)?$': '<rootDir>/$1connector.mock',
        '@/(.*)$': '<rootDir>/$1'
    }
    

    然后在你的屏幕上做

    import { something } from '@/connector'
    
    something() // live connector
    

    但您的规范文件将导入 @/connector.mocksomething() 将做模拟的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-20
      • 2020-09-17
      • 1970-01-01
      • 2018-10-27
      • 2021-09-13
      • 2020-04-12
      • 2017-09-13
      相关资源
      最近更新 更多