如何解决Mocha Chai .end() 函数没有被执行
我一直在尝试为 Nodejs API 编写 Mocha Chai 测试。它以前是使用 Supertest 编写的。然而,在这两种情况下,即使我指定了错误的预期参数,测试也总是通过。
这里是使用 chai 的测试函数
const chai = require('chai');
const chaiHttp = require('chai-http');
chai.should();
chai.use(chaiHttp);
const app = require("../app");
const user = {
first_name: "Name",last_name: "Lastname",email: "email",password: "password"
};
describe("Registration Test",() => {
it("Responds with status of registration",(done) => {
chai.request(app)
.post('/register')
.send(user)
.end((err,res) => {
if(err) done(err);
res.should.have.status.eq(200);
res.body.should.have.property('success').eq(true);
done(); <------------ Here it doesn't work. It returns For async tests and hooks,ensure "done()" is called error
});
done(); <----------- But here it works
});
});
API 以具有成功、消息和状态属性的正文进行响应。但是不管我在chai应该写什么检查,测试总是通过。另外,当我添加 done();在 end() 内部,它没有被找到,但是当我在 end() 外部写入它时,它会运行。所以我假设我的代码永远不会进入 .end()。
解决方法
您需要传递 done
参数并仅在 end
函数内部调用它:
it("Responds with status of doctor registration",function (done) {
chai.request(app)
.post('/register')
.send(user)
.end((err,res) => {
should.not.exist(err);
res.should.have.status.eq(200);
res.body.should.have.property('success').eq(true);
});
});
参考https://www.chaijs.com/plugins/chai-http/#caveat
,所以,我犯了一个愚蠢的错误。我使用 npm start 手动运行服务器并且端口 5000 被占用。当我使用 chai.request(app) 运行测试脚本时,端口已经被占用,我后来才意识到这一点。但是,我像这样使用 async/await 编写了脚本,
describe("Tests for Doctor and Patient Registration",() => {
it("Existing doctor registation fails",async () => {
const res = await chai
.request(app)
.post("/register")
.set("Content-type","application/json")
.set("Connection","keep alive")
.send(user[0]);
expect(res.status).to.equal(200);
expect(res.body).to.have.property("success",false);
expect(res.body).to.have.property(
"message","A user with this email already exist,did you forget your password?"
);
});
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。