Ruby on rails RSPEC错误:赋值等于零(使用==进行比较)
我不熟悉用RSPEC测试控制器。目前我正在测试我的作业是否正确。我尝试测试的控制器操作如下所示:Ruby on rails RSPEC错误:赋值等于零(使用==进行比较),ruby-on-rails,testing,rspec,controller,Ruby On Rails,Testing,Rspec,Controller,我不熟悉用RSPEC测试控制器。目前我正在测试我的作业是否正确。我尝试测试的控制器操作如下所示: def jobs @jobs = @customer.jobs end class CustomersController < ApplicationController before_action :authenticate_member! load_and_authorize_resource rescue_from CanCan::AccessDenied
def jobs
@jobs = @customer.jobs
end
class CustomersController < ApplicationController
before_action :authenticate_member!
load_and_authorize_resource
rescue_from CanCan::AccessDenied do |exception|
redirect_to root_url, :alert => exception.message
end
before_action :set_section
before_action :set_client_form, except: [:index]
before_action :set_customer, only: [:show, :jobs, :notes, :destroy]
helper_method :selected_show_tab
def index
#got rid of this to make it easier to read :p
end
def jobs
@jobs = @customer.jobs
end
我的测试是这样的:
describe CustomersController do
before do
@company = FactoryGirl.create(:company_complete)
@account = FactoryGirl.create(:account_house_address)
end
it "assigns @jobs" do
get :jobs
customer = FactoryGirl.create(:customer_john_human)
job = FactoryGirl.create(:job_complete_job, account_id: @account.id, company_id: @company.id, customer_id: customer.id )
expect(assigns(:jobs)).to eq([customer.jobs])
end
但是,当我运行此命令时,会出现以下错误:
Failure/Error: expect(assigns(:jobs)).to eq([customer.jobs])
expected: [#<ActiveRecord::Associations::CollectionProxy [#<Job id: 1, name: nil, status: "pending", company_id: 1, account_id_old: nil, job_type_id: nil, address_id: nil, trade_id: 1, lead_id: nil, started_date: nil, end_date: nil, created_at: "2015-04-17 03:58:42", updated_at: "2015-04-17 03:58:42", order_number: 2, creator_id: nil, account_id: 1, customer_id: 1, contact_id: nil>]>]
got: nil
但是,我仍然得到了相同的结果:您没有对get调用进行身份验证,因此很可能您的作业操作从未执行过,因为您被重定向到了登录页面。我该怎么做呢?您必须在筛选器之前对所有作业进行存根,以便执行操作。
before :each do
controller.stub(:authenticate_member!)
end