我有这个控制器:
class UsersController < ApplicationController
def enable_password_change
respond_to do |format|
format.js {
render :layout => false
}
end
end
end
以下测试:
test "should render js to show the change password form" do
sign_in_user
request_javascript
get :enable_password_change
assert_template :enable_password_change
assert_response :ok
end
设置请求标头的辅助方法:
def request_javascript
@request.headers["Accepts"] = "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
end
但我的测试报告:
Finished tests in 0.942294s, 7.4287 tests/s, 15.9186 assertions/s.
1) Error:
UsersControllerTest#test_should_render_js_to_show_the_change_password_for:
ActionController::UnknownFormat: ActionController::UnknownFormat
app/controllers/users_controller.rb:9:in `enable_password_change'
test/controllers/users_controller_test.rb:14:in `block in <class:UsersControllerTest>'
7 tests, 15 assertions, 0 failures, 1 errors, 0 skips
我在这里做错了什么?
答案 0 :(得分:3)
我找到了xml_http_request或别名xhr
test "should render js to show the change password form" do
sign_in_user
xhr :get, :enable_password_change
assert_template :enable_password_change
assert_response :ok
assert assigns(:merchant_user)
end
答案 1 :(得分:0)
在TestCase的一个实例中,#get调用#process调用@ request.recycle!它将@ request.headers设置为空哈希。为了测试js响应,我认为你必须让测试启动一个带有Selenium的浏览器或类似的东西。