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?

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top