【问题标题】:How to verify a RESTful service that returns a HTTP 404, using Fancordion?如何使用 Fancordion 验证返回 HTTP 404 的 RESTful 服务?
【发布时间】:2015-02-12 12:17:46
【问题描述】:

我正在用Fantom 编程语言编写一个RESTful API。我正在使用Fancordion 编写验收测试并有这种情况:

Country.fandoc

Country by Code
###############
Passing a country code as a parameter to the Country RESTful service must return the corresponding country
Example
-------
- Given the URL to get the details of Andorra [/country/AD]`set:countryUrl`
- When I send a HTTP GET request to it
- Then I expect the name to be [Andorra]`verifyEq:countryByCode.name`.

CountryFixture.fan

using afBedSheet
using afBounce
using afButter
using afFancordion
using util

@Fixture { specification=`specs/Country.fandoc` }
class CountryFixture : BaseFixture {

  Str? countryUrl

  Country countryByCode() {
    server := BedServer(AppModule#).startup
    client := server.makeClient
    response := client.sendRequest(ButterRequest(`$countryUrl`)).asStr
    Str:Obj? json := JsonInStream(response.in).readJson
    country := Country.fromJson(json)
    return country
  }
}

这很好用。现在我想验证当一个无效的国家代码传递给请求时,RESTful 服务返回一个 HTTP 404 错误,正如我使用浏览器实现和验证的那样。但是,我没有在 Fancordion 文档中找到如何验证是否返回了 HTTP 404 错误。相反,我得到的是夹具故障。

***
*** 1 Fixtures FAILED [6 Fixtures]
***

我对这个场景的验收测试是(附加到 Country.fandoc):

Wrong Country Code
##################
Passing a wrong country code as a parameter to the Country RESTful service must cause it to return a HTTP 404 error

Example
-------
- Given the URL to get the details of country that does not exist [/country/XX]`set:countryUrl`
- When I send a HTTP GET request to it
- Then I expect a HTTP 404 error when I try `verifyEq:countryByCode`

请问我怎样才能捕捉到 404?

【问题讨论】:

    标签: rest fantom afbedsheet


    【解决方案1】:

    如果您正在寻找类似于verifyErr(Type errType) 方法的东西,Fancordion 没有。这是因为这些方法与不太适合 Fancordion 测试风格的实现紧密耦合。

    改为禁用 Butter 引发的 404 Err:

    client.errOn4xx.enabled = false
    

    并让 Fancordion 夹具设置响应。

    Uri? url
    ButterResponse? response
    
    Void httpGet() {
      client := BedServer(AppModule#).startup.makeClient
      client.errOn4xx.enabled = false
      this.response = client.get(url)
    }
    

    然后让 Fancordion 规范验证状态码:

    Example
    -------
    - Given the URL to Unknown is [/country/XX]`set:url`
    - When I send a [HTTP GET request]`exe:httpGet`
    - Then I expect the returned status code to be [404]`eq:response.statusCode`.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-07
      • 2016-02-22
      • 2019-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      相关资源
      最近更新 更多