我在测试中嵌套了describe
,并且像往常一样,我在描述中使用了beforeEach
和之前的内容。我的describe
函数之一调用了辅助函数,该函数创建了动态测试(DRY)。 Mocha运行beforeEach
方法之前的嵌套describe的描述。而我动态创建的it
的组合为undefined
。
const checkProps = (comp, propName, expectedvalue) => {
it(`${comp} should have ${propName} equal to ${expectedvalue}`, () => {
expect(comp.prop(propName)).to.equal(expectedvalue);
});
};
describe('Component', () => {
let wrapper;
beforeEach(() => {
wrapper = shallow(<MyComponent />);
});
describe('prop checking', () => {
checkProps(wrapper, 'title', 'SomeTitle');
});
});
最好的方法是什么?预先感谢。
答案 0 :(得分:1)
会发生什么
Mocha
Run Cycle首先运行所有describe
回调函数(...对于其他测试框架,例如Jest
和Jasmine
也是如此)。
然后,它运行before
钩子,然后运行beforeEach
钩子,最后运行it
回调。
因此checkProps
是运行初始describe
回调的一部分,并且此时wrapper
是undefined
,因此您已经注意到测试说明说{{ 1}}。
undefined should have...
挂钩在beforeEach
回调函数运行之前运行...但是它重新定义 it
,因此当wrapper
回调运行{ {1}}仍然是it
,并且测试失败:
comp
解决方案
几件事需要更改:
undefined
时组件名称必须可用,并且此时 1) Component
prop checking
undefined should have title equal to SomeTitle:
TypeError: Cannot read property 'prop' of undefined
at Context.prop (test/code.test.js:15:19)
还不存在,因此您必须自己传递名称。it
,则可以在wrapper
期间在对象上设置checkProps
属性,并在测试中访问该wrapper
属性,因为该对象是从未重新定义。这是一个有效的测试,可以使您更接近要尝试做的事情:
beforeEach