有意见:
# views/users/index.html.erb
<%= link_to 'Destroy', user_destroy_path(user), remote: :true %>
进行销毁行动:
# controllers/users_controller.rb
respond_to :js
def destroy
@user = user.find(params.require(:id))
@user.destroy
end
呈现:
# 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
但&#34; response.body&#34;总是空字符串。为什么?如何检查js响应的内容?
答案 0 :(得分:3)
您需要告诉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之类的功能规范(请参阅poltergeist gem for capybara)或移至Cucumber。< / p>
然后,您的测试将从用户的角度断言,如下所示:
it 'says goodbye', js: true do
visit home_page
click_button 'Log out'
expect(page).to have_content("Bye Bye #{user.name}")
end