Почему я не могу получить доступ к объекту контроллера в RSpec при тестировании контроллера? - PullRequest
1 голос
/ 27 мая 2009

Я использую rspec-rails, версия 1.2.6. В тесте контроллера

describe WebsController do ...

Кажется, у меня нет доступа к объекту контроллера для того, чтобы заглушить методы. Например, следующее не будет работать:

  before :all do
    @feed = mock_model(Feed)
    controller.should_receive(:feed_from_params).and_return @feed    
  end

Я получаю предупреждения как

An expectation of :feed_from_params was set on nil. 

и запуск сеанса отладки из спецификации указывает на строку перед тем, как метод mock, я получаю следующее:

(rdb:1) self.respond_to? :controller
true
(rdb:1) controller
nil

Из всех примеров доступ к переменной контроллера должен работать, но это не так. Что дает? Как я могу издеваться или заглушать методы в тестируемом контроллере?

Ответы [ 4 ]

3 голосов
/ 27 мая 2009

Попробуйте использовать @controller вместо контроллера

2 голосов
/ 12 июня 2009

Удаление: все в блоке before исправляет проблему. Хотя не уверен почему.

before do
...
end

это то, что вам нужно.

1 голос
/ 02 января 2012

Если вам нужно controller в блоке before(:all), позвоните setup_controller_request_and_response.

0 голосов
/ 17 сентября 2013

PS: это поведение должно быть исправлено в последних версиях RSpec.

См. пример выполнения из RSpec v.2.14:

require "spec_helper"

RSpec.configure {|c| c.before { expect(controller).not_to be_nil }}

describe WidgetsController do
  describe "GET index" do
    it "doesn't matter" do
    end
  end
end
...