неопределенный метод `sign_in 'для # <RSpec :: Core :: ExampleGroup :: Nested_1 :: Nested_1: 0x1057fd428> ошибка при попытке установить RSpec с Devise - PullRequest
6 голосов
/ 22 августа 2011

У меня есть spec/controllers/add_to_carts_spec.rb:

require 'spec_helper'

describe CartItemsController do

  before (:each) do
    @user = Factory(:user)
    sign_in @user
  end

  describe "add stuff to the cart" do
    it "should add a product to the cart" do
      product = FactoryGirl.create(:product)
      visit products_path(product)
      save_and_open_page
      click_on('cart_item_submit')
    end
  end

end

и /spec/support/spec_helper.rb:

# This file is copied to spec/ when you run 'rails generate rspec:install'
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'capybara/rspec'

# Requires supporting ruby files with custom matchers and macros, etc,
# in spec/support/ and its subdirectories.
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

RSpec.configure do |config|
  config.mock_with :rspec
  config.use_transactional_fixtures = true
end

..., который также загружает /spec/support/devise.rb:

RSpec.configure do |config|
  config.include Devise::TestHelpers, :type => :controller
end

Guard работает в фоновом режиме и продолжает выдавать следующее:

Failures:

  1) CartItemsController add stuff to the cart should add a product to the cart
     Failure/Error: sign_in @user
     NoMethodError:
       undefined method `sign_in' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0x1057fd428>
     # ./spec/controllers/add_to_carts_spec.rb:7

Последние пару часов я пробовал различные настройки конфигурации и разные синтаксисы, но, похоже, ничего не изменилось.Любые идеи?

(отредактировано, чтобы отразить более новую ошибку)

Ответы [ 3 ]

18 голосов
/ 20 мая 2013

Идеальным решением было бы создать файл по адресу spec / support / devise.rb и включить помощников по тестированию устройства в конфигурацию Rspec с помощью следующего кода:

Rspec.configure do |config|
  config.include Devise::TestHelpers, :type => :controller
end

Параметр type включает в себя помощникитолько в спецификациях вашего контроллера это позволяет избежать будущих проблем, которые могут возникнуть при его вызове при тестировании моделей или представлений.Это необязательно.

Причина, по которой мы решили добавить отдельный файл для включения помощников, а не включать их в спецификации, как это делал вышеупомянутый solnic, заключается в том, что в случае регенерации спецификации, спецификация будетперезаписаны.

14 голосов
/ 22 августа 2011

По некоторым причинам это также не работает для меня, поэтому я просто вручную включаю этот помощник в свои спецификации, например:

describe CartItemsController do
  include Devise::TestHelpers

  # ...
end
12 голосов
/ 22 августа 2011

Эти помощники по тестированию не будут работать для спецификации интеграции / запроса. Рекомендуемый способ тестирования Devise в таких ситуациях - это посетить страницу входа в систему, заполнить форму и отправить ее, а затем запустить тест.

Пожалуйста, см. Ответ Дэвида Челимски на предыдущий вопрос SO по этой теме для более полного объяснения.

...