如何使用Mocha测试诺言?获取“ ReferenceError:<promise_name>不是函数”

时间:2019-06-25 20:50:20

标签: node.js promise mocha

我写了一个承诺,可以打电话并检查响应代码。我想使用节点对此进行测试。我不断收到“ TypeError:index.GeneratePromise不是一个函数”,而且我不知道出了什么问题。

我尝试将promise封装在另一个函数中,然后从测试文件中调用它。这不会等待promise响应,并且返回的值是“ undefined”。我尝试了多种形式的Promise,Async / await等,这些方法也都没有用。

我的测试

var assert = require('assert');
var index = require('../index');
describe('Basic Mocha String Test', function () {

  it('promise', function () {
    index.GeneratePromise().then(function(value) {
      console.log("promise value: ", value);
      assert.equal(value, 200);
    });
  });
});

我的诺言

exports.GeneratePromise = new Promise(function(resolve, reject) {
  https.get('https://www.google.com/', (resp) => {
    let data = '';
    resp.on('data', (chunk) => {
      data += chunk;
    });
    resp.on('end', () => {
      console.log('status code: ', resp.statusCode)
      resolve(resp.statusCode);
    });
  }).on("error", (err) => {
    reject(err);
  });
});

我希望至少有一些值,而不是返回“ undefined”。这是一个不等待测试文件中我的承诺的问题。

1 个答案:

答案 0 :(得分:1)

您要导出的是实际的Promise,而不是创建Promise的函数。因此,您不应该使用()。另外,it()可以为您提供一个回调,告诉您摩卡测试已完成。参见mochas async docs。试试这个:

var assert = require('assert');
var index = require('../index');
describe('Basic Mocha String Test', function () {
  it('promise', function (done) {
  //index.GeneratePromise().then(function(value) {
    index.GeneratePromise.then(function(value) { // Notice there is no ()
      console.log("promise value: ", value);
      assert.equal(value, 200);
      done(); // This tells mocha your test is done
    });
  });
});