单元测试javascript承诺

时间:2016-12-08 14:53:44

标签: javascript promise

我的代码通过ajax从服务器获取数据并使用promises。

如何为此代码编写单元文本?

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; 
}

2 个答案:

答案 0 :(得分:0)

您可以使用nock模拟服务器响应,并通过mocha

声明承诺值
describe('promise' function (done) {
  getPromise.then(response => {
    // assert response
    done()
  })
}

答案 1 :(得分:0)

我想你想要测试一下promise函数,不管它是否会在你伪造一个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函数来测试你的场景