Я продолжаю получать
@controller is nil: make sure you set it in your test setup method.
Когда я запускаю свои тесты. Любая идея, что это значит?
Я продолжаю получать
@controller is nil: make sure you set it in your test setup method.
Когда я запускаю свои тесты. Любая идея, что это значит?
когда вы наследуете ActionController:: TestCase, он указывает имя контроллера из имени теста, если они не совпадают, вы должны использовать часть теста setup
для его установки.
Итак, если у вас
class PostsControllerTest < ActionController::TestCase
def test_index
#assert something
end
end
Затем @controller
автоматически создается на PostsController
, однако, если это не так, и у вас было другое имя, вам понадобится setup
как таковой
class SomeTest < ActionController::TestCase
def setup
@controller = PostController.new
end
end
Я был в процессе обновления до rspec 3 из бета-версии на рельсах 4 и столкнулся с этой ошибкой. Проблема оказалась в том, что наша спецификация Controller описывает выражения, используемые вместо символов. Rspec пытался создать экземпляр символа в качестве контроллера, но они были фактически "действиями".
#trys to set @controller = Index.new
describe SomeController do
describe :index do
before do
get :index, format: :json
end
it { expect(response).to be_success}
end
end
#works
describe SomeController do
describe 'index' do
before do
get :index, format: :json
end
it { expect(response).to be_success}
end
end
Ответ ErsatzRyan правильный, однако есть небольшая опечатка. Вместо
@controller = PostController
он должен быть
@controller = PostController.new
иначе вы получите сообщение об ошибке: undefined method `response_body = '
Или вы можете просто сделать это:
RSpec.describe PostsControllerTest, :type => :controller do
# ...
end
Если имена совпадают, а переменная @controller по-прежнему равна нулю, попробуйте проверить наличие ошибок в создании экземпляра контроллера. Для меня у меня был метод инициализации контроллера, в котором была ошибка. По какой-то причине контроллер был всего лишь нулем в тесте, вместо того, чтобы бросать ошибку, когда она не была создана.
Проверьте, завершаете ли вы выполнение и завершаете ли вы правильно.
RSpec.describe LeadsController, type: :controller do
# All tests should come here
end