2017-06-05 38 views
0

我想從下面的模塊中對函數getAuthorizedUsers進行單元測試。我需要測試的核心功能是在DB.getUsers的回調函數中。我無法找到模仿DB.getUsers回調的方法。如何在Nodejs中測試嵌套的異步調用?

(function() { 
    const DB = require('./DB'); 

    function getAuthorizedUsers(req, res, callback) { 
     DB.getUsers(req.db, req.userId, function(err, users) { 
      users.push({id: 0}); 
      req.users = users; 
      callback(req, res); 
     }); 
    } 

    module.exports = { 
     getAuthorizedUsers: getAuthorizedUsers 
    }; 
})(); 

這是我到目前爲止有:

(function() { 
    "use strict"; 

    var chai = require("chai"); 
    var User = require("./User"); 

    suite("API", function() { 
     suite("getAuthorizedUsers", function() { 
      var req = { 
       db: {}, 
       userId: '', 
      }; 
      var res = {}; 
      test("adds admin to list of authorized users", function() { 
       User.getAuthorizedUsers(req, res, function(req, res) { 
        //assert that req contains the correct list of authorized users 
       }); 
      }); 
     }); 
    }); 
}()); 

我已經改了個名字,而爲了簡化代碼邏輯。所以,如果代碼不遵循最佳實踐或者沒有意義,請原諒我。

編輯:你有什麼建議如何存根「DB.getUsers」?

+1

https://mochajs.org/#asynchronous-code –

回答

0

我認爲你對測試node.js的

  1. 使用茉莉或摩卡框架 - 他們支持清潔語法測試異步的東西。 http://tobyho.com/2015/12/16/mocha-with-promises/
  2. 在大多數情況下堅持使用承諾而不是回調。它會讓你的生活變得更加輕鬆,在邊緣情況下進行一些折衷。
  3. 您不需要在node.js中使用IIFE,因爲每個模塊都有自己的全局變量。
  4. 這將幫助你嘲笑節點模塊:

+0

感謝您的答覆。你說得對,它是Nodejs。我的問題仍然在「DB.getUsers」中。我試圖達到的目標是將它存根,所以我會改變它的實現,並因此將它的回調用任何我想要的用戶列表解僱。也許這個問題不是正確的。 –

+0

啊,理解。用模擬模塊的東西更新了答案。 –

+0

proxyquire似乎我正在尋找。我會檢查它,然後將答案標記爲解決方案。謝謝。 –