Ruby on rails 在Rails控制器中测试JS操作时,响应总是空的
有观点:Ruby on rails 在Rails控制器中测试JS操作时,响应总是空的,ruby-on-rails,ruby,ruby-on-rails-4,rspec,ujs,Ruby On Rails,Ruby,Ruby On Rails 4,Rspec,Ujs,有观点: # views/users/index.html.erb <%= link_to 'Destroy', user_destroy_path(user), remote: :true %> 这使得: # views/users/destroy.js.erb $('#some_div').html('Bye Bye' + user.name); 我想为它编写控制器测试 # spec/controllers/users_controller_spec.rb describe
# views/users/index.html.erb
<%= link_to 'Destroy', user_destroy_path(user), remote: :true %>
这使得:
# views/users/destroy.js.erb
$('#some_div').html('Bye Bye' + user.name);
我想为它编写控制器测试
# spec/controllers/users_controller_spec.rb
describe UsersController do
it 'says goodbye' do
delete :destroy, id: user
expect(response.body).to include('Bye Bye #{user.name}')
end
end
但是“response.body”总是空字符串。为什么?如何检查js响应的内容?您需要告诉Rspec呈现视图。默认情况下不会
require "spec_helper"
describe UsersController, type: :controller do
render_views
it 'says goodbye' do
delete :destroy, id: user
expect(response.body).to include("Bye Bye #{user.name}")
end
end
但是,由于您依赖于JavaScript,您将无法找到文本,因为这将返回HTML
为了实现这一点,您需要使用实际的浏览器,因此这意味着使用PhantomJS之类的特性规范(请参阅适用于capybara的),或者移动到
然后,您的测试将从用户的角度断言一些事情,比如:
it 'says goodbye', js: true do
visit home_page
click_button 'Log out'
expect(page).to have_content("Bye Bye #{user.name}")
end
如果它不是默认添加的,也许我不应该在控制器规格中使用它?也许我应该将这些规范转移到capybara测试中,在控制器测试中只需确保状态为:ok或:bad_requests,但实际上
render_views
处理js.erb文件中所有嵌入的ruby,所以我不需要使用capybara/poltergeist来通过此测试:)
it 'says goodbye', js: true do
visit home_page
click_button 'Log out'
expect(page).to have_content("Bye Bye #{user.name}")
end