reactjs - 如何在测试中手动模拟 Svg?

标签 reactjs mocking jestjs

我在我的应用程序中使用 stub 文件来模拟图像,这对我来说 99% 的时间都有效。但是,我有一个组件可以根据输入渲染不同的图像,因此我希望能够在单元测试中检查输入是否创建了正确的输出。

基本上我想做的是,如果用户输入“狮子”,我的组件将显示狮子的图片,“老虎老虎等。使用moduleNameMapper,它总是< strong>test-file-stub 并且我希望能够 jest.mock('../lion.svg', ()=> 'lion.svg') 进行特定测试。

最佳答案

感谢Jest's transform配置设置你可以这样做。

package.json

"jest": {
  "transform": {
    "\\.svg$": "<rootDir>/fileTransformer.js"
  }
  ...
}

重要

您需要显式向其他扩展(尤其是*.js*.jsx)提供transform,否则您将收到错误。所以它应该是这样的:

"transform": {
  "^.+\\.js$": "babel-jest",
  "\\.svg$": "<rootDir>/fileTransformer.js"
   ...
}

至于fileTransformer.js,它只是模拟导出文件的路径(您可以添加任何转换来删除路径或扩展名或其他内容):

const path = require('path');

module.exports = {
  process(src, filename) {
    return `module.exports = ${JSON.stringify(path.basename(filename))};`;
  }
};

这意味着

import svgIcon from './moon.svg';

将像

一样工作
const svgIcon = 'moon.svg'

因此对于包含的组件

...
  <img src={svgIcon} />

你可以这样写断言

expect(imgElementYouMayFind.props.src)
  .toEqual('moon.svg')

关于reactjs - 如何在测试中手动模拟 Svg?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55169259/

相关文章:

reactjs - RTK 查询维持 `isLoading` 缓存失效后自动重新获取

python - 无法在 Windows 上使用 Python 模拟操作系统名称

c# - 单元测试 HttpContext.Current.Cache 或 C# 中的其他服务器端方法?

python - Sphinx autodoc 使用模拟卡在 random.choice() 上

reactjs - 用 Jest 测试时如何选择dom

react-native - 测试套件无法使用 @react-navigation/stack 运行

javascript - 使用 React、Jest、React-Testing-Library 测试失败案例

javascript - 无法读取未定义错误的属性 'username'

javascript - 数组过滤器不适用于状态

javascript - 从 React 组件调用 Javascript 函数