我使用promises测试我的休息应用程序(使用节点上的hapi制作)和mocha(3.2)以及supertest(3.0)。
超时后停止并返回错误:
错误:超出2000毫秒超时。对于异步测试和挂钩,请确保" done()"叫做;如果返回Promise,请确保它已解决。
我已经尝试增加超时但它没有工作。
如果我添加done()
来电,我会:
分辨率方法过于规范。指定回调或返回Promise;不是两个。
你能帮我吗?
这是我的测试:
...
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);
})
});
});
答案 0 :(得分:0)
在函数签名中指定done
参数将测试标记为异步。而不是调用它会导致待测试。
如果使用function (done) { ... }
指定,则应调用它。这就是错误所说的。并且不应该指定是否通过返回promise来使规范异步。