这个问题类似于我打开的this previous one。但现在我正在使用不同的框架Jest。
我的代码是这样的:
import * as React from "react";
import * as ReactDOM from "react-dom";
import * as injectTapEventPlugin from "react-tap-event-plugin";
import Application from "./components/Application";
import "./assets/styles/theme.css";
injectTapEventPlugin();
ReactDOM.render(<Application />, document.getElementById("root"));
我想在这里测试3件事:
injectTapEventPlugin()
被召唤。ReactDOM.render
分别使用预期参数<Application />
和document.getElementById("root")
进行了调用。./assets/styles/theme.css
。我知道这个很奇怪但是这个导入就在这里,以便webpack选择它并将其包含在最终的包中。也许这个导入不应该存在,我应该确保theme.css
文件以其他方式存在。我认为至少需要测试1和2 ... Jest使用Jasmine2而我也使用Enzyme(但这可能对此没有帮助。)
感谢任何帮助:)
答案 0 :(得分:1)
测试这个的问题是,模块只导入东西,但不导出任何东西,这使得很难测试。所以你应该问自己的第一个问题是“为什么我需要测试这个”。因为这里发生的唯一想法是2个函数调用。
测试#1很简单,用间谍模拟模块,将其导入测试并检查间谍是否被调用
import * as injectTapEventPlugin from "react-tap-event-plugin";
jest.mock('react-tap-event-plugin', ()=>jest.fn())
expect(injectTapEventPlugin).toHaveBeenCalled()
在这种情况下,不确定import * as
语法是否有问题。
对于测试#2,我不确定它是否可以进行测试,因为你无法模拟document.getElementBy
,因为在测试之前你可以覆盖它。