簡體   English   中英

RSPEC對nil:NilClass的未定義方法“ jobs”(紅寶石在軌道上)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM