【发布时间】:2020-06-24 13:53:35
【问题描述】:
在下面的代码块(示例 #1)中,expect(this.req.headers["user-agent"]).to.equal("BOOM") 抛出错误并且测试失败。
describe("http.get with headers", () => {
it("should return response with status code 200", async () => {
const userAgent =
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:74.0) Gecko/20100101 Firefox/74.0"
nock("https://api.example.net")
.get("/hello")
.reply(function() {
expect(this.req.headers["user-agent"]).to.equal("BOOM")
return [200]
})
const httpInstance = new http({
headers: {
"user-agent": userAgent,
},
})
let response = await httpInstance.get("https://api.example.net/hello")
expect(response.statusCode).to.equal(200)
})
})
在以下代码块(示例 #2)中,expect(requestBody.message).to.equal("BOOM") 抛出“静默”错误(return [200] 永远不会执行),但测试通过。为什么?
describe("logger.captureMessage(message, callback)", () => {
it("should send captured exception to sentry", () => {
return new Promise((resolve, reject) => {
nock("https://sentry.io")
.post("/api/3926156/store/")
.reply((uri, requestBody: any) => {
expect(requestBody.message).to.equal("BOOM")
return [200]
})
logger.captureMessage("foo", () => {
resolve()
})
})
})
})
使用catch 并触发reject 有效,但在示例#1 中一切正常的情况下为什么需要这样做?
describe("logger.captureMessage(message, callback)", () => {
it("should send captured exception to sentry", () => {
return new Promise((resolve, reject) => {
nock("https://sentry.io")
.post("/api/3926156/store/")
.reply((uri, requestBody: any) => {
try {
expect(requestBody.message).to.equal("BOOM")
return [200]
} catch (error) {
reject(error)
}
})
logger.captureMessage("foo", () => {
resolve()
})
})
})
})
【问题讨论】:
-
1.你没有提供错误信息。 2. 猜测:您正在尝试访问一个不存在的属性(如 req 或 headers):
this.req.headers["user-agent"] -
@alfasin 感谢您的帮助。没有错误信息。 expect 断言根本不会抛出错误,因此即使不应该通过,测试也会通过。
-
您的代码说:“这会引发错误并停止实验室。”所以现在我很困惑......这是没有错误消息的错误???
-
@alfasin 问题是为什么当代码非常相似时,一个期望断言会导致测试失败,而另一个不会。困惑。