Mar*_*bov 2 javascript unit-testing vue.js jestjs
以前,我创建了模拟函数,并且能够使用类似的方法来测试它们是否被调用expect(mockFunction).toHaveBeenCalledTimes(2)。
但是,我有一种情况,我想看看当我模拟单击汉堡菜单时,如何访问组件中的特定方法,以便我可以在 中测试它expect?
我知道我可以通过单击到达它,因为如果我将 console.log 放入其中,它就会触发。
我在 html 中有一个元素:
<hamburger class="hamburger" @click.native="toggleMobileNav"/>
Run Code Online (Sandbox Code Playgroud)
我的方法是:
toggleMobileNav() {
console.log('this console log works on click');
//...add classes to nav for css
},
Run Code Online (Sandbox Code Playgroud)
在我的测试中我需要做这样的事情:
it('should be able to toggle nav in mobile', async () => {
wrapper.find('.hamburger').trigger('click');
expect(notebookNav.toggleMobileNav()).toHaveBeenCalled(); //doesn't work because it is not a mock or spy function
})
Run Code Online (Sandbox Code Playgroud)
您需要监视您的方法,然后触发单击事件应该没问题,例如:
it('should be able to toggle nav in mobile', () => {
const toggleMobileNavSpy = jest.spyOn(notebookNav, 'toggleMobileNav');
expect(toggleMobileNavSpy).toHaveBeenCalledTimes(0);
wrapper.find('.hamburger').trigger('click');
expect(toggleMobileNavSpy).toHaveBeenCalledTimes(1);
toggleMobileNavSpy.mockClear();
}
Run Code Online (Sandbox Code Playgroud)