我写了一个承诺,可以打电话并检查响应代码。我想使用节点对此进行测试。我不断收到“ 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”。这是一个不等待测试文件中我的承诺的问题。
答案 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
});
});
});