Por que não consigo acessar o objeto controlador no RSpec ao testar um controlador?
-
06-09-2019 - |
Pergunta
Eu estou usando rspec-rails, versão 1.2.6. Em um teste de controlador
describe WebsController do ...
Eu não parecem ter acesso ao objeto controlador, a fim de métodos de stub. Por exemplo, o seguinte não funcionará:
before :all do
@feed = mock_model(Feed)
controller.should_receive(:feed_from_params).and_return @feed
end
Eu recebo avisos como
An expectation of :feed_from_params was set on nil.
e disparando uma sessão de depuração da especificação diz sobre a linha um pouco antes da simulação método, eu recebo o seguinte:
(rdb:1) self.respond_to? :controller
true
(rdb:1) controller
nil
De todos os exemplos, o acesso a variável controlador deve funcionar, mas isso não acontece. O que da? Como eu pode zombar ou métodos stub em um controlador em teste?
Solução 2
Remova o: tudo em antes correções bloco a questão. Não sei por que, apesar de tudo.
before do
...
end
é o que você precisa.
Outras dicas
Tente usar @controller em vez de controlador
Se você precisa controller
em um bloco before(:all)
, chamada setup_controller_request_and_response
.
PS:. Este comportamento deve ser corrigido em versões recentes do RSpec
Veja a correndo exemplo de 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