Rails 3 +Devise + RSpec: undefined method 'visit'

devise, rspec, ruby, ruby-on-rails, ruby-on-rails-3

Solution

`visit` is capybara method, not Rspec. You have to add `capybara` gem to your Gemfile, run `bundle`, and `require 'capybara/rspec'` in spec_helper, just like ArcaneRain pointed out.

Problem

I met strange problem. I have never work with Devise gem before. So, i try to write simple RSpec test: ``` require 'spec_helper' describe "Admins" do before(:each) do @email = "test@test.ru" user = FactoryGirl.create(:user, :email => @email ) end describe "sign in/out" do describe "success" do it "should sign a user in and out" do visit new_user_session_path end end end end ``` And i receive such error: ``` 1) Admins sign in/out success should sign a user in and out Failure/Error: visit new_user_session_path NoMethodError: undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1::Nested_1:0x007fb2b7e393d0> # ./spec/requests/admins_spec.rb:12:in `block (4 levels) in <top (required)>' Finished in 0.05646 seconds ``` My Factory: ``` FactoryGirl.define do factory :user do |user| user.admin true user.password "qwerty" user.sequence(:email) { |n| "user#{n}@user.com" } end end ``` Routes: ``` new_user_session GET /users/sign_in(.:format) devise/sessions#new user_session POST /users/sign_in(.:format) devise/sessions#create destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy user_password POST /users/password(.:format) devise/passwords#create new_user_password GET /users/password/new(.:format) devise/passwords#new edit_user_password GET /users/password/edit(.:format) devise/passwords#edit PUT /users/password(.:format) devise/passwords#update cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel user_registration POST /users(.:format) devise/registrations#create new_user_registration GET /users/sign_up(.:format) devise/registrations#new edit_user_registration GET /users/edit(.:format) devise/registrations#edit PUT /users(.:format) devise/registrations#update DELETE /users(.:format) devise/registrations#destroy ```

Original source