![](/img/trans.png)
[英]undefined method `session' for nil:NilClass in RSpec Rails
[英]RSPEC undefined method 'jobs' for nil:NilClass (ruby on rails)
我用RSPEC測試我的控制器
控制器代碼
class CustomersController < ApplicationController
before_action :set_customer
def jobs
@jobs = @customer.jobs
end
private
def set_customer
if params[:id]
@customer = Customer.find(params[:id])
else
@customer = Customer.find(params[:customer_id])
end
end
我的Rspec測試看起來像這樣:
測試代碼
describe "GET job" do
it "renders the job view" do
customer = FactoryGirl.create(:customer)
controller.stub(:set_customer).and_return(customer)
get (:jobs)
expect(response).to render_template("customers/jobs.json.jbuilder")
end
end
我得到的錯誤-在調用get(:jobs)期間發生的錯誤是:
錯誤:
Failures:
1) CustomersController assigns @jobs
Failure/Error: get (:jobs)
NoMethodError:
undefined method `jobs' for nil:NilClass
# ./app/controllers/customers_controller.rb:37:in `jobs'
我進行了另一項測試,但是在調用get(:jobs)時,該測試也給了我同樣的錯誤。 我正在取消set_customer函數,並返回一個客戶變量(通過工廠女孩制作)。 我不確定為什么它仍未定義? 作為參考(再次),該方法在控制器中發生錯誤:
def jobs
@jobs = @customer.jobs
end
如果這不是執行此操作的正確方法,我如何生成@customer變量(如其在控制器set_customers函數中所做的那樣)(通過params)並將其傳遞給rspec測試?
您需要將:id
或:customer_id
參數值傳遞給請求調用,例如:
get :jobs, id: 42
存根set_customer
不會設置實例變量,我想您甚至不需要存根,您已經有實際客戶了
describe "GET job" do
it "renders the job view" do
customer = FactoryGirl.create(:customer)
get(:jobs, id: customer)
expect(response).to render_template("customers/jobs.json.jbuilder")
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.