笑话+酶。无法读取未定义的属性'_isMockFunction'。模拟箭头的keyDown

时间:2017-11-28 12:58:35

标签: javascript reactjs unit-testing jestjs enzyme

我的主要组件测试方法存在严重问题。经过多次重试后我的实际测试仍然无效,看起来像这样:

describe('<App />:', () => {
    beforeEach(() => {
        wrapper = mount(<Provider store={store}><App /></Provider>);
    });
    describe('Interaction:', () => {
        it('should call ArrowDown()', () => {
            const instance = wrapper.instance();
            spy = jest.spyOn(instance, 'ArrowDown');
            instance.forceUpdate();
            wrapper.simulate('keyDown', {key: 'Arrow down'});
            expect(spy).toHaveBeenCalled();
        });
    }); 
});

我从控制台得到的是:

  

TypeError:无法读取未定义

的属性'_isMockFunction'

其他测试(如快照或查找App内部的其他组件)可以正常工作。我正在寻找simillar问题,但我找到的解决方案无法正常工作。请求帮助。

PS:我使用原型时出现相同的错误:

describe('<App />:', () => {
    beforeEach(() => {
        wrapper = mount(<Provider store={store}><App /></Provider>);
    });
    describe('Interaction:', () => {
            it('should call ArrowDown()', () => {
            spy = jest.spyOn(App.prototype, 'ArrowDown');
            wrapper = mount(<Provider store={store}><App /></Provider>);
            wrapper.simulate('keyDown', {key: 'Arrow down'});
            expect(spy).toHaveBeenCalled();
        });
    }); 
});

1 个答案:

答案 0 :(得分:1)

看起来jest.SpyOn(App.prototype, 'ArrowDown')是造成问题的一行。我不确定为什么不看你的App声明,但我会指出,这不是我将如何进行测试,而且我冒昧,也许这不是&#&# 39; Jest / Enzyme的使用方式。

在这个测试中,除了事实上React已经成功地将一个按键绑定到一个组件函数之外,你实际上并没有测试任何东西,这个组件函数并没有真正对你的代码或任何特定逻辑运用任何有意义的东西。我通常会编写一个模拟按钮单击的测试,然后检查新的DOM状态以检查按钮单击是否具有所需的效果。

如果涉及服务调用,我可能会监视服务层,检查它是否被正确调用并返回受控值,然后确保DOM处于正确状态。当你以这种方式做事时,间谍单个组件方法并不是必需的。