gpt4 book ai didi

node.js - Mocha 不会等到完成之前

转载 作者:搜寻专家 更新时间:2023-11-01 00:20:55 27 4
gpt4 key购买 nike

我在准备数据库进行测试的 mocha 测试中有这个方法 before :

before(() => {
db.User.destroy({where: {}})
.then(db.User.create({id: 1, username: 'foo', password: 'secret', email: 'foo@local.dev'}))
.then(db.Post.destroy({where: {}}))
.then(() => {
db.Post.create({id: 1, title: 'Foo', markdown: 'Bar', authorId: 1, published: true});
db.Post.create({id: 2, title: 'Bar', markdown: 'Foo', authorId: 1, published: false});
})
.catch(err => console.err(err));
});

我的第一个测试很简单:

describe('[GET] /posts', () => {
it('expect to GET all posts', done => {
chai.request(server)
.get('/posts')
.end((err, res) => {
expect(err).to.be.null;

expect(res).to.have.status(200);
expect(res).to.be.json;
expect(res.body.length).to.be.equal(2);

done();
});
});
});

它不起作用,我的 res.body.length 等于 0。第二个测试:

describe('[GET] /posts?published=:bool', () => {
it('expect to GET all published posts', done => {
chai.request(server)
.get('/posts?published=true')
.end((err, res) => {
expect(err).to.be.null;

expect(res).to.have.status(200);
expect(res).to.be.json;
expect(res.body.length).to.be.equal(1);

done();
});
});

按预期工作,结果在这里。最后,当我检查我的数据库时,两个帖子都在这里。当我在地址 /posts 上使用 postman 时,它也按预期工作......

最佳答案

您的 before 正在运行异步代码,但您没有告诉 Mocha 它是。

您可以从中返回 promise 链(Mocha 支持 promise 作为 done 回调的替代方法):

before(() => {
return db.user.destroy({where: {}})
.then(db.user.create({id: 1, username: 'foo', password: 'secret', email: 'foo@local.dev'}))
.then(db.post.destroy({where: {}}))
.then(() => {
db.post.create({id: 1, title: 'foo', markdown: 'bar', authorid: 1, published: true});
db.post.create({id: 2, title: 'bar', markdown: 'foo', authorid: 1, published: false});
});
});

(Mocha 也会捕获任何异常,因此无需添加 .catch)

关于node.js - Mocha 不会等到完成之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46733116/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com