ruby-on-rails - RSPEC 未定义方法 'jobs' 为 nil :NilClass (ruby on rails)

标签 ruby-on-rails testing rspec controller

我正在使用 RSPEC 测试我的 Controller

Controller 代码

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 函数,并返回一个客户变量(由工厂女孩制作)。我不确定为什么它仍然未定义?作为引用(再次) Controller 中此方法发生错误:

def jobs
  @jobs = @customer.jobs
end

如果这不是执行此操作的正确方法,我如何生成一个@customer 变量,就像它在 Controller set_customers 函数中所做的那样(通过参数)并将其传递给 rspec 测试?

最佳答案

stub set_customer 不设置实例变量,我认为你甚至不需要 stub ,你已经有了实际的客户

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

关于ruby-on-rails - RSPEC 未定义方法 'jobs' 为 nil :NilClass (ruby on rails),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29738899/

相关文章:

ruby-on-rails - 如何删除供应商代码插入的回调?

reactjs - 使用 Jest 和 Enzyme 测试 React 组件。错误 : Can't read property of map is undefined

angularjs - 将 Angular 服务注入(inject)集成测试

ruby-on-rails - cancan + rspec = 未初始化常量 Anonymou(无 s)?

jquery - 使用 javascript 以嵌套 Rails 形式拆分输入名称属性

ruby-on-rails - 翻译 Rails 时区

Rspec 期望 raise_error ObjectDisabledException 抛出 NameError 异常

ruby-on-rails - Rspec:使用 super(args) 初始化 Controller 类时,rspec-rails 是否存在问题?

ruby-on-rails - 列出与 http 方法关联的所有 Rails 路线

ios - 无法运行单个 KIFTestCase(XCTestCase 的子类)