1

これは、この質問で説明した問題に関連している可能性があると思います。

Factory Girl を使用してユーザー Factory を作成するときに、カピバラが Rails アプリでサインアップ フォームをテストできない理由がわかりません。エラーが発生し続けemail has already been takenます。これが私の工場です:

FactoryGirl.define do
  sequence :email do |n|
    "email#{n}@example.com"
  end

  factory :user do
    email
    password "secret"
    password_confirmation "secret"
  end
end

これが私のサインアップテストです:

require "test_helper"

describe "Signup integration" do

  before(:each) do
    visit signup_path
  end

  it "successfully routes to the signup page" do
    page.text.must_include "Sign Up"
  end

  it "signs up a new user" do
    user = FactoryGirl.create(:user)
    fill_in "user_email", :with => user.email
    fill_in "Password", :with => user.password
    fill_in "Password confirmation", :with => user.password_confirmation
    click_button "Create User"
    current_path == "/"
    page.text.must_include "Signed up!"
  end  
end

そして、これが私の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

何が問題なのかよくわかりません。Capybarasave_and_open_pageメソッドを各行に追加すると、パスワード フィールドまで取得できますが、Capybara はパスワード フィールドに入力できません。email3@example.com電子メール フィールドのような固有の電子メール アドレスを追加しますが、Factory Girl のパスワードを追加することはできません。テストにプレーンテキストのパスワードを入力すると (fill_in "Password", :with => "password")フィールドに入力することはできますが、これをテストする適切な方法とは思えません。

また、アプリで行っているログイン テストに関連している可能性があるかどうかもわかりません。ログインテストでカピバラが別のユーザーとしてログインしていることが問題なのでしょうか? もしそうなら、どのようにテストのセッションを消去しますか?

最後に、関連する場合に備えて、これが私の gemfile です。

source 'https://rubygems.org'

gem 'rails', '3.2.8'
gem 'jquery-rails'
gem 'pg'
gem 'heroku'
gem 'taps'
gem 'sorcery'
gem 'bootstrap-sass'
gem 'simple_form'

group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'
  gem 'uglifier', '>= 1.0.3'
end

group :test do
  gem 'minitest'
  gem 'capybara'
  gem 'capybara_minitest_spec'
  gem 'turn'
  gem 'factory_girl_rails'
end
4

3 に答える 3

1

データベースクリーナーは私を助けました..

gemfile

  gem 'database_cleaner'

minitest_helper.rb

  class MiniTest::Spec
    include FactoryGirl::Syntax::Methods
    before :each do
      DatabaseCleaner.clean
    end
  end
于 2012-12-23T03:28:40.183 に答える
0

これは、一意である必要がある電子メール列に同じ値を使用しているために発生しています

Gemfile でgem fakeまたはgem database_cleanerを使用します。group :development, test

Fakers を使用するとdatabase_cleaner、レコードの作成後にデータベースをクリーンアップしながら、レコードのランダムな値を生成できます

于 2016-10-09T17:40:41.463 に答える