RSpec очень относится к каталогу, в котором вы размещаете свои тесты. Если вы поместите тест в неправильный каталог, он не будет автоматически смешивать различные тестовые помощники, которые устанавливают различные типы тестов. Кажется, что ваша установка использует spec/features
, который не является официальным default directory (spec/requests
, spec/integration
, или spec/api
).
Основываясь на странице руководства, я не уверен, как у них есть настройка файла spec_helper.rb
. Хотя примеры, поэтому они используют spec/requests
для проведения тестов.
Вы можете заставить RSpec признать другой каталог для запроса спецификации, используя одно из следующих действий:
вручную добавить правильный модуль тестового файла:
# spec/features/pages/index_spec.rb
require 'spec_helper'
describe "Visiting the index page" do
include RSpec::Rails::RequestExampleGroup
# Rest of your test code
context "when the a user has logged in and attempts to visit the page" do
let(:user) { FactoryGirl.create :user }
before do
log_in user
end
specify { response.should redirect_to loggedin_path }
end
end
Include это в вашем файле spec/spec_helper.rb
:
RSpec::configure do |c|
c.include RSpec::Rails::RequestExampleGroup, type: :request, example_group: {
file_path: c.escaped_path(%w[spec (features)])
}
end
Поскольку это учебник я бы рекомендовал после стандарта, включая require 'spec_helper'
в верхней O е файла спецификации и что ваш фактический spec/spec_helper.rb
файл имеет require 'rspec/rails'
минорной ноте, вам не нужно ставить specify
внутри из it
блока. Они являются псевдонимами друг друга, поэтому просто используйте их.
context "when the a user has logged in and attempts to visit the page" do
let(:user) { FactoryGirl.create :user }
before do
log_in user
end
# All of the following are the same
it "redirects the user to next page" do
response.should redirect_to loggedin_path
end
it { response.should redirect_to loggedin_path }
specify "redirects the user to next page" do
response.should redirect_to loggedin_path
end
specify { response.should redirect_to loggedin_path }
end
Примечание, в соответствии с документацией по capybara, вы должны быть в состоянии поставить свои тесты водосвинку в spec/features
. Чтобы сделать эту работу, убедитесь, что вы загружаете require 'capybara/rspec'
в свой spec_helper
или непосредственно в тестовый файл.
Однако, глядя на source, я не видел, где они автоматически включают этот каталог. Вы также можете попробовать добавить тег type: :feature
к внешнему блоку describe
в тестовом файле. Хотя наиболее вероятным решением является использование spec/requests
.
ссылка на учебник? Направьте строку с ошибкой? – fotanus
ошибка находится на 'cookies [: remember_token] = user.remember_token'. Учебник: http://ruby.railstutorial.org/chapters/updating-showing-and-deleting-users#top –
Можете ли вы опубликовать полную трассировку стека, пожалуйста? – hlh