我知道我可以使用异步或回调,但不应该承诺也可以使用吗?
我的研究表明我应该做的就是用return代替done();所以我已经这样做了,我可能有太多的回报。
尽管仍然有2000ms的错误。
我将这些转换为回调(使用done())并且它确实可以正常工作,但我只是想知道我在这里犯了错误的地方。
chai.use(chaiHTTP);
describe('Users', () => {
let UserId;
before(() => {
return mongoose.connect(
'mongodb://localhost/testpromises',
{},
err => {
if (err) return console.log(err);
return console.log('TEST DB Connection Success!!');
}
);
});
after(() => {
return mongoose.connection.close();
});
beforeEach(() => {
const newUser = new User({
username: 'testuser',
password: 'testuser'
});
return newUser
.save()
.then(savedUser => {
userId = savedUser._id.toString();
})
.catch(err => {
console.log(err);
});
});
afterEach(() => {
return User.remove({ username: 'testuser' }, err => {
if (err) console.log(err);
});
});
describe(`[GET] /admin/users`, () => {
it('should get the testuser account', () => {
return chai
.request(userRoutes)
.get('/admin/users')
.then(response => {
expect(response.status).to.equal(200);
expect(username).to.equal('testuser');
})
.catch(err => {
throw err;
});
});
});
});
答案 0 :(得分:0)
根据我在阅读您的代码后的理解,问题可能在于您如何在mongoose.connect(...)
函数中调用before
。
mongoose.connect()
如果作为第三个参数提供,则返回一个promise或调用一个回调。 (mongoose.callback in the docs)。
您对connect
的调用具有回调函数,因此返回的内容可能不是promise
,而是undefined
。
如果这是真的,那么可能你的测试函数在连接之前开始运行,并且等待连接和请求本身的组合花费的时间超过2000毫秒。
您应该将before
更改为类似的内容。 afterEach
也存在同样的问题。
before(() => {
return mongoose.connect('mongodb://localhost/testpromises', {})
.then(() => {
console.log('TEST DB Connection Success!!')
})
.catch(err => {
console.log(err);
});
);
});