在我的功能测试中,我验证了响应状态:
assert_response :error, "My error message"
但是,Rails会忽略我的自定义消息并报告:
预期回复是<:error>,但是< 201>
任何想法为什么?
我使用Rails 3.2.6。
答案 0 :(得分:1)
我想知道同样的事情。事实证明它已在Github上修复:https://github.com/rails/rails/commit/d28a15ede59f6434f1b7a8d01be060fa73b4746c
对我来说,将rails / actionpack gem更新到最新版本并未包含该修复,但我能够手动更新response.rb。它位于:
/Users/alex/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.8/lib/action_dispatch/testing/assertions/response.rb
答案 1 :(得分:0)
在您的测试中,您已将响应类型提及为:错误,其与状态代码500-599匹配。但是,当您的测试返回状态代码201时,它无法匹配并根据assert_response的定义显示消息,这是
def assert_response(type, message = nil)
clean_backtrace do
if [ :success, :missing, :redirect, :error ].include?(type) && @response.send("#{type}?")
assert_block("") { true } # to count the assertion
elsif type.is_a?(Fixnum) && @response.response_code == type
assert_block("") { true } # to count the assertion
else
assert_block(build_message(message, "Expected response to be a <?>, but was <?>", type, @response.response_code)) { false }
end
end
end
由于类型和状态代码不匹配而进入其他地方并提供该消息。
以下是回复的类型及其匹配代码:
:success: Status code was 200
:redirect: Status code was in the 300-399 range
:missing: Status code was 404
:error: Status code was in the 500-599 range