使用 supertest 和 mocha 进行测试无法解决 promise
Testing with supertest and mocha fails to resolve promise
我正在用 mocha (3.2) 和 supertest (3.0) 使用 promises 测试我的其余应用程序(在节点上用 hapi 制作)。
它在超时和 returns 错误后停止:
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
我已经尝试增加超时,但没有成功。
如果我添加一个 done()
调用,我得到:
Resolution method is overspecified. Specify a callback or return a Promise; not both.
你能帮帮我吗?
这是我的测试:
...
const request = require('supertest');
const redis = require('redis');
const bluebird = require("bluebird");
bluebird.promisifyAll(redis.RedisClient.prototype);
const config = require('../src/config/tests');
describe('Routing', function () {
let url = 'http://localhost:8080';
let storage = redis.createClient({
host: config.config.host,
port: config.config.port
});
it('should pass', function (done) {
let username = 'user',
userHash = md5(username),
data = {
user_id: username,
sess_id: 'session'
};
return storage.delAsync("users:" + userHash)
.then(result => {
return request(url)
.post('/login')
.send(data)
.expect(201)
.expect({info: true});
})
.then(response => {
return storage.hgetallAsync("users:" + userHash);
})
.then(result => {
assert({user_id: userHash}, result);
})
});
});
在函数签名中指定 done
参数将测试标记为异步。不调用它会导致待定测试。
如果用function (done) { ... }
指定,应该调用。这就是错误所说的。如果通过返回承诺使规范异步,则不应指定它。
我正在用 mocha (3.2) 和 supertest (3.0) 使用 promises 测试我的其余应用程序(在节点上用 hapi 制作)。
它在超时和 returns 错误后停止:
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
我已经尝试增加超时,但没有成功。
如果我添加一个 done()
调用,我得到:
Resolution method is overspecified. Specify a callback or return a Promise; not both.
你能帮帮我吗?
这是我的测试:
...
const request = require('supertest');
const redis = require('redis');
const bluebird = require("bluebird");
bluebird.promisifyAll(redis.RedisClient.prototype);
const config = require('../src/config/tests');
describe('Routing', function () {
let url = 'http://localhost:8080';
let storage = redis.createClient({
host: config.config.host,
port: config.config.port
});
it('should pass', function (done) {
let username = 'user',
userHash = md5(username),
data = {
user_id: username,
sess_id: 'session'
};
return storage.delAsync("users:" + userHash)
.then(result => {
return request(url)
.post('/login')
.send(data)
.expect(201)
.expect({info: true});
})
.then(response => {
return storage.hgetallAsync("users:" + userHash);
})
.then(result => {
assert({user_id: userHash}, result);
})
});
});
在函数签名中指定 done
参数将测试标记为异步。不调用它会导致待定测试。
如果用function (done) { ... }
指定,应该调用。这就是错误所说的。如果通过返回承诺使规范异步,则不应指定它。