Капибара не работает с фабричной девушкой
Я использую minitest с factory girl и capybara для интеграционных тестов. Capybara прекрасно работает, когда я не использую factory girl для создания объекта пользователя, например:
it "logs in a user successfully" do
    visit signup_path
    fill_in "Email", :with => "joey@ramones.com"
    fill_in "Password", :with => "rockawaybeach"
    fill_in "Password confirmation", :with => "rockawaybeach"
    click_button "Create User"
    current_path == "/"
    page.text.must_include "Signed up!"
    visit login_path
    fill_in "Email", :with => "joey@ramones.com"
    fill_in "Password", :with => "rockawaybeach"
    check "Remember me"
    click_button "Log in"
    current_path == "/dashboard"
    page.text.must_include "Logged in!"
    page.text.must_include "Your Dashboard"
  end
require "test_helper"
describe "Password resets" do
  before(:each) do
    @user = FactoryGirl.create(:user)
  end
  it "emails user when requesting password reset" do
    visit login_path
    click_link "password"
    fill_in "Email", :with => user.email
    click_button "Reset my password"
  end
end
FactoryGirl.define do
  factory :user do |f|
    f.sequence(:email) { |n| "foo#{n}@example.com" }
    f.password "secret"
    f.password_confirmation "secret"
  end
end
Вот фактическая ошибка что я получаю:
est_0001_emails user when requesting password reset      0:00:01.624 ERROR
        undefined local variable or method `login_path' for #<#<Class:0x007fc2db48d820>:0x007fc2df337e40>
Но, visit login_path прекрасно работает, если я удаляю @user = FactoryGirl.create(:user) 
Это ошибка с капибарой? Или я делаю что-то не так?
2 ответа:
Я, наконец, получил эту работу с помощью DatabaseCleaner камень, используя
DatabaseCleaner.strategy = truncation. Вот что у меня получилось:Test_helper.rb
ENV["RAILS_ENV"] = "test" require File.expand_path("../../config/environment", __FILE__) require "minitest/autorun" require "capybara/rails" require "active_support/testing/setup_and_teardown" class IntegrationTest < MiniTest::Spec include Rails.application.routes.url_helpers include Capybara::DSL register_spec_type(/integration$/, self) def last_email ActionMailer::Base.deliveries.last end def reset_email ActionMailer::Base.deliveries = [] end end class HelperTest < MiniTest::Spec include ActiveSupport::Testing::SetupAndTeardown include ActionView::TestCase::Behavior register_spec_type(/Helper$/, self) end Turn.config.format = :outline # Database cleaner. DatabaseCleaner.strategy = :truncationФабрики.rb
FactoryGirl.define do sequence :email do |n| "email#{n}@example.com" end factory :user do email password "secret" password_confirmation "secret" end endИнтеграция / login_integration_test.rb
require "test_helper" describe "Login integration" do it "shouldn't allow an invalid login" do visit login_path click_button "Log In" page.text.must_include "invalid" end it "should login a valid user" do DatabaseCleaner.clean user = FactoryGirl.create(:user) visit login_path within ".session" do fill_in "session_email", :with => user.email fill_in "session_password", :with => "secret" end click_button "Log In" page.text.must_include "Logged in!" save_and_open_page end end