2015-09-17 24 views
5

Czy nie powinienem widzieć zmiennych instancji utworzonych w działaniu kontrolera w ramach moich testów rspect?Uzyskiwanie dostępu do zmiennych instancji kontrolera z poziomu kontrolera rspec

# /app/controllers/widget_controller.rb 
... 
def show 
    @widget = ... 
    puts "in controller: #{@widget}" 
end 
... 

-

# /spec/controllers/widget_controller_spec.rb 
RSpec.describe WidgetController, type: :controller do 
... 
describe "GET #show" do 
    it "assigns the requested widget as @widget" do 
    get :show, { :id => 1 } # this is just an example - I'm not hardcoding the id 

    puts "in spec: #{@widget}" 
    end 
end 
... 

Oto wynik otrzymuję kiedy uruchomić tę specyfikację:

controller: #<Widget:0x007f9d02aff090> 
in spec: 

mylę się sądząc, że powinienem mieć dostęp do @widget w moim specyfikacja kontrolera?

Odpowiedz

11

Użyj metody assigns:

it "assigns the @widget" 
    expect(assigns(:widget)).not_to be_nil 
end 

oczywiście, można sprawdzić widget jak chcesz, ale nie widząc co @widget jest z przewidzianym kodzie kontrolera, po prostu sprawdzić, czy to było nil

Jeśli chcąc puts widget, jak w przykładzie, wystarczy wydrukować go z assigns

puts assigns(:widget)