我们现在在backbone / requireJS项目中使用reactJS创建组件,下面是我创建的一个简单组件:
define(function(require) {
var React = require('react');
var Step1Comp = React.createClass({
render: function() {
return <div>Step1</div>
}
});
return Step1Comp;
});
这是测试:
'use strict';
jest.unmock('../../public/js/Step1Comp');
import React from 'react';
import ReactDOM from 'react-dom';
import TestUtils from 'react-dom';
import Step1Comp from '../../public/js/Step1Comp';
describe('a test testing comp', ()=>{
it('render comp', ()=>{
window.define={};
var step1Comp = TestUtils.renderIntoDocument(<Step1Comp />);
expect(TestUtils.isCompositeComponent(step1Comp)).toBeTruthy();
});
});
当我们正在运行jest时,我收到了这个错误:
Test suite failed to run
ReferenceError: define is not defined
组件必须在define中,因为主项目是用requireJS编写的,我们必须将它包装在define中,以便可以使用其他组件加载此comp。
我试图在测试中添加窗口[&#39; define&#39;] = {}以模拟define函数,但它没用。
有人可以帮我解决这个问题吗?
提前致谢。
现在更新如下:
jest.mock('define', () => {
});
import React from 'react';
import ReactDOM from 'react-dom';
import TestUtils from 'react-dom';
import Step1Comp from '../../public/js/app/create-quote/components/comps/details/step1/Step1Comp';
describe('a test testing comp', ()=>{
it('render comp', ()=>{
var step1Comp = TestUtils.renderIntoDocument(<Step1Comp />);
expect(TestUtils.isCompositeComponent(step1Comp)).toBeTruthy();
});
});
但是当我开玩笑时,仍然是同样的错误:
> NGCSC@1.0.0 test-faked /Users/frankhe/myjuniper-new/myjuniper/ngcsc-ui
> jest
FAIL __tests__/test_comp/test.jest.js
● Test suite failed to run
ReferenceError: define is not defined
答案 0 :(得分:0)
Jest不支持RequireJS。在Step1Comp.test.js的顶部模拟依赖项将更容易也更合适:
jest.mock('amdefine', () => {
// mock implementation
})
import React from 'react';
import ReactDOM from 'react-dom';
import TestUtils from 'react-dom';
import Step1Comp from '../../public/js/Step1Comp';
describe('a test testing comp', ()=>{
it('render comp', ()=>{
var step1Comp = TestUtils.renderIntoDocument(<Step1Comp />);
expect(TestUtils.isCompositeComponent(step1Comp)).toBeTruthy();
});
});
这样,当加载Step1Comp时,它的依赖关系已被模拟,因此它不会尝试加载RequireJS模块。
答案 1 :(得分:0)
我可以看到更新,但我注意到你在嘲笑定义。 从依赖权中需要定义吗?如果是,那么你需要模拟依赖,而不是定义。
这是我正在谈论的样本:
const define = require('amdefine')
然后你需要模拟依赖,而不是定义
jest.mock('amdefine', () => {})
我希望你明白。