1
我有一个叫做button-actions的模块中的函数,当用户点击后退按钮时会调用它。我想直接测试backButtonActions方法,但需要模拟调用backButtonActions内的leaveApp和displayById方法。jest.fn()的值必须是模拟函数或间谍
这里是我的button-actions.js文件的方法。
export function backButtonActions(label, page){ //, page
console.log("LABEL = ", label, " page = ", page);
switch(label){
case 'step1':
page.leaveApp();
break;
case 'step2':
page.displayById();
break;
}
}
我是新来测试,所以我可能会错过一些非常简单的东西。 下面是我test.js文件
window.$ = require('jquery');
import {backButtonActions} from '../button-actions';
describe('Button Actions',() => {
const page = {}
beforeEach(() => {
page.leaveApp = jest.fn(() => "leave");
page.displayById = jest.fn(() => "Display");
document.body.innerHTML =
'<div>' +
' <button class="btn-back" />' +
'</div>';
$('.btn-back').click((event, label) =>{
backButtonActions(label, page);
});
});
it('backButtonActions requires a string of either "step1" or "step2"',() => {
$('.btn-back').trigger('click', 'step1');
expect(backButtonActions).toBeCalled();
expect(backButtonActions).toBeCalledWith("step1" || "step2");
});
})
当我运行上面的测试中,我碰到下面的错误。
●按钮操作> backButtonActions要求要么 ‘第1步’或‘第2步’的字符串
expect(jest.fn())[.not].toBeCalled() jest.fn() value must be a mock function or spy. Received: function: [Function backButtonActions] at Object.<anonymous> (test/js/spec/create/button-actions.test.js:64:50)
有别的我应该运行到得到这个工作?
Accordind来开玩笑模拟功能也被称为“间谍”,因为他们让你窥探由其他代码间接调用的函数的行为,而不仅仅是测试输出。你可以用jest.fn()创建一个模拟函数。如果没有实现,模拟函数将在调用时返回undefined。现在我很困惑,你能否解释一下jest.fn和jest.spyOn之间的区别 –
任何一个例子的机会,因为它仍然给我同样的错误。 –
试试这个:而不是从'../ button-actions'中导入{backButtonActions};''从'../ button-actions';'尝试'import *作为buttonAction。然后将所有对'backButtonActions'的引用改为'buttonActions.backButtonActions'。然后在你的测试的第一行,你可以窥探'buttonActions.backButtonActions':'jest.SpyOn(buttonActions,'backButtonActions');'' –