【发布时间】:2017-05-22 13:55:24
【问题描述】:
我使用 webpack 的代码拆分功能 (require.ensure) 来减少我的 React 应用程序的初始包大小,方法是从异步加载的单独包加载页面加载时不可见的组件。
这很好用,但是我在为它编写单元测试时遇到了麻烦。
这是我目前尝试过的代码的相关摘录:
describe('When I render the component', () => {
let component,
mySandbox;
beforeEach(() => {
mySandbox = sandbox.create();
mySandbox.stub(require, 'ensure');
component = mount(<PageHeader />);
});
describe('the rendered component', () =>
it('contains the SideNav component', () =>
component.find(SideNav).should.have.length(1)
)
);
afterEach(() => mySandbox.restore());
});
运行测试时,我收到以下错误消息:
“包含 SideNav 组件”的“每个之前”钩子:不能存根不存在的自己的属性确保
发生这种情况是因为require.ensure 是一种仅存在于 webpack 包中的方法,但我不会将我的测试与 webpack 捆绑在一起,我也不想这样做,因为它会产生更多的开销并且可能会增加测试执行时间。
所以我的问题是:
有没有办法在不通过 webpack 运行测试的情况下使用 Sinon 存根 webpack 的 require.ensure?
【问题讨论】:
-
你是对的。每个模块都有一个独特的
require函数。这比我想象的要复杂。你可以阅读更多关于这个here。猴子补丁require.esnure将非常困难。我还建议您考虑 @hinok 建议的 babel-plugin-rewire 之类的东西 -
您的问题已在此处得到解答:stackoverflow.com/questions/33070482/…
-
问题是,我在开始我的项目时使用 rewire 进行了评估,发现 Mockery 的性能要好得多,所以我想我必须弄清楚如何使用该帖子中的 rewire 解决方案嘲讽。
标签: javascript reactjs webpack mocha.js sinon