0

我有一个 Rails 3 项目,我想将当前选择的公司存储在会话变量中。

我正在使用人员控制器规范,并且想暂时排除 current_company,因为我正在为人员新控制器操作隔离我的规范示例。

it "should call current_company" do 
  company = mock_model(Company, :id => "1")
  controller.should_receive(:current_company).and_return(company)
  get :new
end

这是我对员工控制器的新操作

  def new
    @staff = Staff.new
    @staff.company_id = current_company.id
  end

我不断收到错误

Failure/Error: get :new
     NameError:
       undefined local variable or method `current_company' for #<StaffsController:0x000000028d6ad8>

我也试过把它存起来而不是使用 should_receive

  controller.stub!(:current_company).and_return(company)

我犯了同样的错误。

4

2 回答 2

0

您的代码对我来说看起来不错,它应该可以工作。一定还有其他我们没有看到的问题。我注意到控制器名称是“StaffsController”——对吗?仔细检查控制器的名称和相应的规范——它们应该是相同的。

于 2011-02-22T06:31:51.400 回答
0

我认为它在“应该成功”的示例/测试中被轰炸了,所以我把我的存根放在了 before 块中。

require 'spec_helper'

describe StaffsController do

  describe "GET 'new'" do
    let(:staff) { mock_model(Staff, :company_id= => nil)}
    let(:company) { mock_model(Company, :id => 1)}

    before do
      Staff.stub!(:new).and_return(staff)
      controller.stub!(:current_company).and_return(company)
    end

    it "should be successful" do
      get :new
      response.should be_success
    end

    it "should call current_company" do 
      controller.should_receive(:current_company).and_return(company)
      get :new
    end
  end
end

这适用于:

class StaffsController < ApplicationController
  def new
    @staff = Staff.new
    current_company.id
  end
end
于 2011-02-23T01:21:08.887 回答