2017-06-13 313 views
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) 

有别的我应该运行到得到这个工作?

回答

3

你需要刺探backButtonActions功能,无论是通过茉莉的spyOn方法或通过玩笑的jest.spyOn方法

https://facebook.github.io/jest/docs/jest-object.html#jestspyonobject-methodname

+0

Accordind来开玩笑模拟功能也被称为“间谍”,因为他们让你窥探由其他代码间接调用的函数的行为,而不仅仅是测试输出。你可以用jest.fn()创建一个模拟函数。如果没有实现,模拟函数将在调用时返回undefined。现在我很困惑,你能否解释一下jest.fn和jest.spyOn之间的区别 –

+0

任何一个例子的机会,因为它仍然给我同样的错误。 –

+0

试试这个:而不是从'../ button-actions'中导入{backButtonActions};''从'../ button-actions';'尝试'import *作为buttonAction。然后将所有对'backButtonActions'的引用改为'buttonActions.backButtonActions'。然后在你的测试的第一行,你可以窥探'buttonActions.backButtonActions':'jest.SpyOn(buttonActions,'backButtonActions');'' –

相关问题