Вспомогательному тесту Rspec необходим доступ к методу контроллера - PullRequest
1 голос
/ 15 марта 2012

У меня есть тест Rspec для вспомогательного метода, который требует доступа к моему current_user методу, предоставленному Devise. Проблема в том, что я использую макрос login_user в своих тестах для помощников, которые не работают!

Вот как выглядит мой тест:

describe 'follow_link' do
  before :each do
    login_user
  end

  it "display 'follow' if the curren_user is not following" do
    user = Factory :user
    helper.follow_link(user).should == 'Follow'
  end
end

Но с этим не получается:

Failure/Error: login_user
 NoMethodError:
   undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_2:0x007faf8c680090>
# ./spec/support/macros.rb:4:in `login_user'
# ./spec/helpers/users_helper_spec.rb:29:in `block (3 levels) in <top (required)>'

И этот макрос выглядит так:

def login_user
  @user = Factory(:user)
  visit new_user_session_path

  # fill in sign in form
  within("#main_container") do
    fill_in "user[email]", with: @user.email
    fill_in "user[password]", with: @user.password
    click_button "Sign in"
  end
end

Мне нужно:

require 'spec_helper'

в моем тесте и все, но этот метод все еще недоступен.

Ответы [ 3 ]

2 голосов
/ 15 марта 2012

Друг 'посещение' - это метод Capybara, который используется для написания интеграционных тестовых примеров.

Для написания тестовых примеров модульных тестов RSpec вам нужно заглушить вызов метода current_user и сосредоточиться на функциональности вспомогательного метода..

describe 'follow_link' do
  before :each do
   @user = Factory :user
   helper.stub(:current_user).and_return(@user)
  end

  it "display 'follow' if the curren_user is not following" do
    helper.follow_link(@user).should == 'Follow'
  end
end
1 голос
/ 26 марта 2013

Google привел меня сюда, но ответы выше не помогли мне, после небольшого исследования я нашел блог ниже.

Моя ошибка:

NoMethodError:
       undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0xa49a73c>

Поскольку Capybara 2.0 приходится использовать папку spec/features команды capybara больше не работают в папке spec/requests.

Блог, который мне помог: http://alindeman.github.com/2012/11/11/rspec-rails-and-capybara-2.0-what-you-need-to-know.html

Надеюсь, вы найдетеэто полезно.

1 голос
/ 15 марта 2012

Как правило, в таких случаях я имитирую методы контроллера: mock (current_user) {nil}

...