Mocha + Chai + NodeJS 永远不会失败
Mocha + Chai + NodeJS never fails while it should
你好,我只是尝试在 nodeJS 上用 mocha + chai 做一些功能测试 api 每次我尝试一些东西,即使它不是测试所期望的,测试似乎通过了。
这是我的测试代码:
const server = require("../server");
const chai = require("chai");
const chaiHttp = require("chai-http");
chai.use(chaiHttp);
const expect = require("chai").expect;
const requester = chai.request(server);
describe("test user", function(){
describe("get all", function(){
it("should return all users and 400", function(){
requester.get("/api/users")
.then(function(res){
console.log(res.status);
expect(res).to.have.status(400);
})
.catch(function(err){
throw(err);
})
})
})
})
这就是我得到的:
> backend@1.0.0 test
> mocha "tests/users.test.js"
App listening at http://:::4000
test user
get all
✔ should return all users and 400
1 passing (13ms)
Successfully connected to MongoDB.
200
因为我等待 400 并得到 200,它应该会失败,但事实并非如此。
问题是您正在测试一个承诺,因此您的测试在承诺解决(成功或错误)之前完成。为了使 mocha 等待 promise,您可以执行以下操作之一:
- Return mocha
it
街区的承诺
describe("test user", function(){
describe("get all", function(){
it("should return all users and 400", function(){
return requester.get("/api/users")
.catch(function(res){
expect(res).to.have.status(400);
})
})
})
})
- 使用异步函数和
await
承诺,然后执行期望:
describe("test user", function(){
describe("get all", function(){
it("should return all users and 400", async function(){
const res = await requester.get("/api/users")
expect(res).to.have.status(400);
})
})
})
这里你可以省略 catch
子句,因为 mocha 会解决它。
您可以在 official mocha docs 中阅读有关测试异步内容的更多信息。
你好,我只是尝试在 nodeJS 上用 mocha + chai 做一些功能测试 api 每次我尝试一些东西,即使它不是测试所期望的,测试似乎通过了。
这是我的测试代码:
const server = require("../server");
const chai = require("chai");
const chaiHttp = require("chai-http");
chai.use(chaiHttp);
const expect = require("chai").expect;
const requester = chai.request(server);
describe("test user", function(){
describe("get all", function(){
it("should return all users and 400", function(){
requester.get("/api/users")
.then(function(res){
console.log(res.status);
expect(res).to.have.status(400);
})
.catch(function(err){
throw(err);
})
})
})
})
这就是我得到的:
> backend@1.0.0 test
> mocha "tests/users.test.js"
App listening at http://:::4000
test user
get all
✔ should return all users and 400
1 passing (13ms)
Successfully connected to MongoDB.
200
因为我等待 400 并得到 200,它应该会失败,但事实并非如此。
问题是您正在测试一个承诺,因此您的测试在承诺解决(成功或错误)之前完成。为了使 mocha 等待 promise,您可以执行以下操作之一:
- Return mocha
it
街区的承诺
describe("test user", function(){
describe("get all", function(){
it("should return all users and 400", function(){
return requester.get("/api/users")
.catch(function(res){
expect(res).to.have.status(400);
})
})
})
})
- 使用异步函数和
await
承诺,然后执行期望:
describe("test user", function(){
describe("get all", function(){
it("should return all users and 400", async function(){
const res = await requester.get("/api/users")
expect(res).to.have.status(400);
})
})
})
这里你可以省略 catch
子句,因为 mocha 会解决它。
您可以在 official mocha docs 中阅读有关测试异步内容的更多信息。