【问题标题】:Rails RSPEC controller testing to count # of users on INDEX pageRails RSPEC 控制器测试以计算 INDEX 页面上的用户数
【发布时间】:2014-06-07 23:39:32
【问题描述】:
正在进行控制器测试并想测试当我转到索引页面时,我应该看到创建的用户总数,并且应该等于实际创建的所有用户。无法让它工作,也没有错误出现,它只是冻结,我必须按 control c 退出。
describe "GET #index" do
it "show a list of all users" do
total = User.all.count
get :index
expect(response).to eq total
end
【问题讨论】:
标签:
ruby-on-rails
unit-testing
rspec
controller
【解决方案1】:
rspec 控制器测试默认不渲染视图,测试成功可能是更好的开始
describe "GET #index" do
it "show a list of all users" do
get :index
expect(response).to be_success
end
end
如果你真的想检查渲染
describe "GET #index" do
render_views
it "show a list of all users" do
total = User.all.count
get :index
expect(response).to contain total.to_s
# OR
expect(response.body).to match total.to_s
end
end
见:https://www.relishapp.com/rspec/rspec-rails/v/2-2/docs/controller-specs/render-views
【解决方案2】:
如果您想检查页面上某些信息的显示,最好使用 Capybara 编写集成测试。
控制器测试的目的是检查传入的参数、在控制器中初始化的变量和控制器响应(渲染视图或重定向......)。
关于您的问题 - 如果您有下一个控制器:
class UsersController < ApplicationController
def index
@users = User.all
end
end
你可以编写下一个控制器测试:
describe UsersController do
it "GET #index show a list of all users" do
User.create(email: 'aaa@gmail.com', name: 'Tim')
User.create(email: 'bbb@gmail.com', name: 'Tom')
get :index
expect(assigns[:users].size).to eq 2
end
end