gpt4 book ai didi

unit-testing - Electron + Jest - ipcRenderer 在单元测试中未定义

转载 作者:行者123 更新时间:2023-12-01 08:49:18 24 4
gpt4 key购买 nike

我正在为一个使用在 Electron 中运行的 React(带有 webpack)构建的项目做出贡献。执行时使用 Jest 进行单元测试 ,它失败并出现错误 TypeError: Cannot read property 'on' of undefined (并且在不测试时工作正常,例如使用 Electron 运行)。

编码:

import React, { Component } from 'react';
import { ipcRenderer } from 'electron';
// some more imports

class Setup extends Component {
constructor(props) {
super(props);

this.state = {
// some state
};

ipcRenderer.on('open-file-reply', this.someMethod); // << fails on this line
}
// more class stuff
}

最佳答案

我花了几天时间,但最后,我在 this great blog post 中找到了这个答案。 .引用:

Jest is called from Node and doesn't run test code through Webpack. Instead, we have to use Jest's mocking functions to replace the import with a stub file.



Jest 有一个名为 moduleNameMapper [object<string, string>] 的辅助方法。 .从 Jest 文档:

A map from regular expressions to module names that allow to stub out resources, like images or styles with a single module.



它应该添加到您的 中包.json 像这样的根对象:
{
"name": "My awesome app",
"jest": {
"moduleNameMapper": {
"electron": "<rootDir>/src/components/tests/mock/electron.js"
}
}
}

和模拟文件本身(/src/components/tests/mock/electron.js):
export const ipcRenderer = {
on: jest.fn()
};

通过这种方式,您可以 stub 其他 Electron 模块和方法(例如上面博客中显示的远程)。

关于unit-testing - Electron + Jest - ipcRenderer 在单元测试中未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46898185/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com