你好,我只是嘗試在 nodeJS api 上用 mocha chai 做一些功能測驗,每次我嘗試一些東西,即使它不是測驗預期的,測驗似乎通過了。
這是我的測驗代碼:
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 它應該失敗,但事實并非如此。
uj5u.com熱心網友回復:
問題是您正在測驗一個承諾,因此您的測驗在承諾解決之前完成(成功或錯誤)。為了讓 mocha 等待 promise,您可以執行以下操作之一:
- 從 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 會解決這個問題。
您可以在官方 mocha 檔案中閱讀更多關于測驗異步內容的資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/341082.html
標籤:javascript 节点.js 测试 摩卡.js 柴
