я написал следующее RSpec тест особенность спецификации:Использование Завещание в RSpec тесты функции
require "rails_helper"
RSpec.describe "Team management", type: :feature do
user_sign_in
describe "User creates a new team" do
...
expect(page).to have_link("#{team_name}")
end
end
Метод user_sign_in
определяется в моем rails_helper.rb
:
ENV['RAILS_ENV'] ||= 'test'
require 'spec_helper'
require File.expand_path('../../config/environment', __FILE__)
require 'rspec/rails'
require 'capybara/rails'
...
module UserSignInHelpers
def user_sign_in
before(:each) do
@request.env['devise.mapping'] = Devise.mappings[:user]
@current_user = FactoryGirl.create(:user)
@current_user.confirm
sign_in :user, @current_user
end
end
end
RSpec.configure do |config|
...
# The different available types are documented in the features, such as in
# https://relishapp.com/rspec/rspec-rails/docs
config.infer_spec_type_from_file_location!
config.extend UserSignInHelpers, type: :controller
config.extend UserSignInHelpers, type: :feature
config.include Devise::TestHelpers, type: :controller
config.include Devise::TestHelpers, type: :feature
end
Метод user_sign_in
работает от всех мои контрольные спецификации, но когда я запускаю свою спецификацию спецификации, она не работает:
Team management
User creates a new team
example at ./spec/features/user_creates_a_new_team_spec.rb:19 (FAILED - 1)
Failures:
1) Team management User creates a new team
Failure/Error: Unable to find matching line from backtrace
NoMethodError:
undefined method `env' for nil:NilClass
# /Users/xxxx/.rvm/gems/ruby-2.2.1/gems/devise-3.5.1/lib/devise/test_helpers.rb:24:in `setup_controller_for_warden'
Я не понимаю, почему это работает в тестах контроллера, а не в тесте. Есть ли что-то, что я могу сделать, чтобы эта работа проходила в функциональных тестах?
Вы помещаете Auth в spec/support/auth.rb? Если да, то как я могу включить его, чтобы он был доступен для моего контроллера и спецификаций auth? Я добавил 'config.extend Auth, type:: controller' и' config.extend Auth, type:: feature' to 'rails_helper.rb'. Вот что происходит, когда я пытаюсь запустить тест с использованием Auth: https://goo.gl/Ce7a3d – RobertJoseph
Я думаю, вы должны использовать 'include' вместо' extend', это разные вещи 'include' и' extend'. –
Если я хочу получить доступ к переменной @user в моих спецификациях, я должен использовать 'include'? – RobertJoseph