sails控制器中asyn函数的单元测试,其中async函数独立调用

时间:2017-12-15 06:14:38

标签: javascript unit-testing sails.js sinon

我有一个风帆控制器,我在做的事情如下:

...
function asynFunc(){
/* some logic */

} 
module.exports = {
    myFunc: function () {

     // Call async function and return
     asynFunc();
     return true;
    }
};

现在我想为asynFunc编写单元测试。我能够编写myFunc的单元测试但不能编写asynFunc(获取数据,验证数据)。

请告诉我:

  1. 我如何模拟asyncFunc
  2. 我如何单元测试asynFunc

2 个答案:

答案 0 :(得分:0)

你真的需要测试私人功能吗?如果你把它私有,似乎你可以在测试其他方法时测试它?

如果您确实需要测试它,可以执行以下操作: myModule.js



async function asyncFunc(){
  /* some logic */
} 
module.exports = {
  myFunc: async function () {
    // Call async function and return
    await asyncFunc();
    return true;
  }
};




test.js



const rewire = require('rewire');
const myModule = rewire('./myModule');

describe('unit/myModule:', () => {
  const revert = (obj) => {
    obj.__revert__();
    delete obj.__revert__;
  };

  it('asyncFunc', async () => {
    const asyncFuncSpy = jasmine.createSpy();
    asyncFuncSpy.__revert__ = myModule.__set__('asyncFunc', asyncFuncSpy);

    const actual = await myModule.myFunc();

    expect(actual).toBeThruthy();
    expect(asyncFuncSpy).toHaveBeenCalled();

    revert(asyncFuncSpy)
  })
})




答案 1 :(得分:0)

在99%的案例中,这是对控制器的错误使用!将该功能包装到服务中并统一测试服务。

// Controller
module.exports = {
     myFunc: function () {

     // Call async function and return
     MyService.asynFunc();
     return true;
     }
};

// Service
module.exports = {
     async : function asynFunc(){
     /* some logic */

    }
}