【发布时间】:2019-02-16 07:23:37
【问题描述】:
在使用 spyOn 为我的 Reactjs 应用程序使用 recompose、redux 等测试我的 compose() 块内的方法调用时遇到一些问题。
基本布局是这样的:
// index.jsx
import { foo, baz } from './lib';
const enhance = compose(
foo(),
lifecycle({
componentDidMount() {
baz();
}
});
);
export const MyComp = (...);
const mapStateToProps = state => (...);
export connect(mapStateToProps)(enhance(MyComp));
// lib.js
export const foo = () => {
lifecycle({
componentDidMount() {
bar();
}
});
}
export const bar = () => {};
export const baz = () => {};
//index.test.jsx
import * as lib from '.libs';
describe('Test', () => {
const didMountSpy = jest.spyOn(MyComp.prototype, 'componentDidMount');
const fooSpy = jest.spyOn(lib, 'foo');
const barSpy = jest.spyOn(lib, 'bar');
const bazSpy = jest.spyOn(lib, 'baz');
const wrapper = mount(<MyComp ... />);
expect(didMountSpy).toHaveBeenCalledTimes(1); // PASS
expect(bazSpy).toHaveBeenCalledTimes(1); // PASS
expect(fooSpy).toHaveBeenCalledTimes(1); // FAIL
expect(barSpy).toHaveBeenCalledTimes(1); // FAIL
});
对我来说奇怪的是,如果您查看 baz(),当函数调用未包含在 compse() 中的另一个方法中时,我能够成功地预期该函数调用。但我无法期待 foo(), bar()。我的怀疑是酶/玩笑如何模拟 Reactjs 生命周期方法有些奇怪。
有没有人遇到过类似的事情并有解决方案让 spyOn 为生命周期.componentDidMount() 下的嵌套方法工作?
谢谢!
【问题讨论】:
标签: reactjs redux jestjs enzyme recompose