测试控制器是否呈现JS模板

时间:2013-07-25 23:05:56

标签: ruby-on-rails testing ruby-on-rails-4

我有这个控制器:

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

我在这里做错了什么?

2 个答案:

答案 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的浏览器或类似的东西。