【问题标题】:Unit test for asyn function inside sails controller where async function called independently在独立调用异步函数的 Sails 控制器中对异步函数进行单元测试
【发布时间】:2017-12-15 06:14:37
【问题描述】:

我有一个帆控制器,我正在做类似的事情:

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

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

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

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

请告诉我:

  1. 如何模拟 asyncFunc
  2. 如何对 asynFunc 进行单元测试

【问题讨论】:

    标签: javascript unit-testing sails.js sinon


    【解决方案1】:

    你真的需要测试私有函数吗?如果你有私有的,你测试其他方法时似乎可以测试它?

    如果你真的需要测试它,你可以这样做: 我的模块.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)
      })
    })

    【讨论】:

      【解决方案2】:

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

      // Controller
      module.exports = {
           myFunc: function () {
      
           // Call async function and return
           MyService.asynFunc();
           return true;
           }
      };
      
      // Service
      module.exports = {
           async : function asynFunc(){
           /* some logic */
      
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2016-08-03
        • 1970-01-01
        • 2021-09-25
        • 2018-10-26
        • 1970-01-01
        • 2022-08-22
        • 1970-01-01
        • 1970-01-01
        • 2020-04-20
        相关资源
        最近更新 更多