2016-12-08 145 views
1

我的代碼通過ajax從服務器獲取數據並使用promise。單元測試javascript承諾

如何爲此代碼編寫單位文本?

function getPromise(){ 
    var p = new Promise(function(resolve, reject) { 
    http.get({ 
     host: 'localhost', 
     port: 3000, 
     path: '/blist' 
    }, function(res) { 
     if(res.statusCode < 200 || res.statusCode>300) { 
     reject('statusCode=' + res.statusCode); 
     return; 
     } 
     var data=""; 
     res.on('data', function (chunk) { 
     data += chunk; 
     resolve(data); 
     return; 
     }); 
     res.on('error', function(error) { 
     console.log("Got error: " + e.message); 
     reject(error); 
     }); 
    }) 
    }); 
    return p; 
} 
+0

你能添加一個更簡潔的例子嗎? – MoeSattler

+0

告訴我們你到目前爲止嘗試過什麼? – EhsanT

+0

我創建此FUNC調用getPromise() module.exports = { \t \t \t列表:功能(REQ,RES){ \t \t \t \t變種P = getPromise(); \t \t \t \t p.then(功能(數據){ \t \t \t \t res.send(數據); \t \t \t})。捕獲(功能(ERR){ \t \t \t \t的console.log(ERR ); \t \t \t}) \t \t \t} \t \t} – flower

回答

0

你可以嘲笑與nock服務器的響應,並通過mocha

describe('promise' function (done) { 
    getPromise.then(response => { 
    // assert response 
    done() 
    }) 
} 
+0

你能解釋更多你的意思嗎? – flower

0

斷言承諾值我想你要測試的承諾的功能,無論是該怎麼辦,如果你假的要的是什麼一個http調用。

爲此,您可能會考慮傳入http對象並將其作爲參數進行回調,以便您可以嘲笑它們並在測試中模擬成功和錯誤響應。

喜歡的東西

getPromise(http, req, callback) { 
    var promise = new Promise((resolve, reject) -> { 
    http.get(req, callback); 
    callback.on('data', data -> { // Resolve or reject looking at the status code }) 
    }) 
    return promise; 
} 

然後你可以嘲笑你的回調,以及HTTP GET#功能來測試你的場景