如何验证 Frisby 测试中的状态码是 200 还是 201

How to verify if either 200 or 201 status code in Frisby Test

我正在使用 frisby v0.8.5 和 jasimine-node。使用 frisby 可以断言预期的 return http 状态代码:

 f = frisby.create(/*stuff....*/);
 ...
 ... 
 f.expectStatus(200);
 f.toss();

如果端点只有一个预期状态,这可以正常工作,但在某些情况下(例如 POST 端点)您可能会返回 201200如果资源已经存在。

在 frisby 中有什么方法可以检查几个可接受的响应状态代码吗?

您可以向 Firsby lib 添加额外的方法,方法是创建需要 xyz = require "./xyz" 的本地文件 xyz.coffee,您可以在其中提供:

Frisby = Object.getPrototypeOf(frisby.create())

Frisby.expectStatuses = (statuses) ->
  @current.expects.push =>
    expect(statuses).toContain(@current.response.status)
  return this

最终您总是可以将上面的内容复制粘贴到您的 spec.coffee 文件中 毕竟,只需在您的脚本中使用:

.expectStatuses([200, 201])

它完美地完成了工作。

好的,找到了一种使用 after() 和本机 jasmine 匹配功能的简单方法。

大意是因为Frisby是异步的,你需要在它被抛出并被捕获后检查结果。在原始结果中,您可以根据正则表达式手动验证状态代码,在本例中为 200 或 201:

 f = frisby.create(/*stuff....*/);
 // ...
 // ... 

 f.after( function(err, res, body) {

     //Look for either a 200 or 201
     expect(res.statusCode).toMatch(//20[0|1]/);

 });

 f.toss();