2015-11-11 6 views
1

Я получаю сообщение об ошибке на 'ответ' для ...Rspec неопределенными локальную переменную или метод `ответа»

спецификации/особенности/test_name_spec.rb

require "spec_helper" 

describe "the signin process", :type => :feature do 
    it "does not sign me in if I use the wrong password" do 
    visit '/users/sign_in' 
    within("#new_user") do 
     user = Fabricate(:user, email: '[email protected]', password: 'password') 
     fill_in 'Email', :with => '[email protected] example.com' 
     fill_in 'Password', :with => 'badone' 
    end 
    click_button 'Log in' 
    expect(response).to render_template(:new) 
    end 
end 

в Gemfile

group :test do 
    gem 'shoulda-matchers', '~> 2.8', require: false # now loaded inside of spec/spec_helper.rb 
    gem 'capybara', '~>2.4' 
    gem 'launchy' 
    gem 'capybara-email', github: "dockyard/capybara-email" 
    gem 'database_cleaner', '~> 1.5', '>= 1.5.1' 
end 

Я смущен, так как тест выше данного преуспевает использование ожидать, но с page

expect(page).to have_content 'Signed in successfully.' 

Что здесь может быть?

EDIT

Я изменил его ...

expect(page).to have_content 'Log in' 

который является в основном то же самое, но я все же хотел бы знать, почему response является заблудших. Разве это не доступно в Capybara, или есть еще одна проблема, почему это не сработает?

ответ

7

Вы пишете feature spec. С характеристиками функций нет объекта ответа. По дизайну, с особенностью спецификации, вы не проверяете проблемы с низким уровнем, такие как то, что было отображено, но более высокие, такие как ожидаемый контент, находящийся на странице.

Возможно, вас заинтересует request specs, которые отображают интеграционные тесты рельсов и, таким образом, позволяют использовать спецификации, которые охватывают несколько запросов, но предоставляют методы ответа.

Однако вы не можете (или, по крайней мере, не должны) использовать водосвинку (visit, click_button и т.д.) внутри запроса спецификации - много часов было потеряно проблем, которые сводились к смешиванию языка тест интеграции (get, post, response) и capybara. Они существуют в совершенно разных мирах, например запрос, инициированный capybara, не влияет на response, и запрос, инициированный get, не влияет на page.

+0

Спасибо. Как вы можете видеть по моему правлению. Я начал придумывать те же строки о том, действительно ли ответ был действительным в спецификации спецификации. – Beengie

1

У вас есть expect за пределами вашего блока it. Это вызовет все виды haywire.

Все утверждения (и тестовый установочный код) должны быть вставлены в пределах it, before и after блоков.

+0

извините за опечатку. Я исправил это сейчас ... я перепутал все пространства, чтобы превратить его в код. Теперь это правильный код для того, что у меня есть, но все еще сломан с той же ошибкой. – Beengie

Смежные вопросы