заглушка rspec current_company - PullRequest
       20

заглушка rspec current_company

0 голосов
/ 22 февраля 2011

У меня есть проект 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)

Я получаю ту же ошибку.

Ответы [ 2 ]

0 голосов
/ 23 февраля 2011

Я думаю, что это был взрыв на примере / тесте «должен быть успешным», поэтому я поставил свою заглушку в блоке «до».

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
0 голосов
/ 22 февраля 2011

Ваш код выглядит нормально для меня, он должен работать. Должна быть другая проблема, которую мы не видим. Я заметил, что контроллер называется «StaffsController» - это правильно? Дважды проверьте имена контроллера и соответствующие спецификации - они должны совпадать.

...