テスト スイートを機能させることができません。さまざまな構成を組み合わせて一致させようとしました。しかし、このビューの結果はすべて同じです。テスト間で何もクリーンアップされないか、データベースが空です。
この種のエラーが発生します:
何も掃除していないとき
1) Authentication Sign in page as new user with valid information creates a user
Failure/Error: select group.name, from: 'user_group_id'
Capybara::Ambiguous:
Ambiguous match, found 2 elements matching option "Group g"
またはこれ、空の DB :
1) Authentication Sign in page as new user with valid information creates a user
Failure/Error: select group.name, from: 'user_group_id'
Capybara::ElementNotFound:
Unable to find option "Group g"
database_cleaner の有無にかかわらず試してみました。Spork なしで試しました。たとえば、さまざまなソースからさまざまな構成を試しました。
https://github.com/bmabey/database_cleaner#rspec-example
しかし、私はそれを機能させる方法を理解できません。
gems バージョンを含む Gemfile は次のとおりです。
gem 'rails', '3.2.13'
gem 'sqlite3'
group :development, :test do
gem 'libnotify'
gem 'rb-inotify'
gem 'rspec-rails' (2.13.0)
gem 'guard-rspec' (2.5.1)
gem 'guard-spork' (1.5.0)
gem 'guard-livereload'
gem 'rack-livereload'
end
group :test do
gem 'capybara' (2.0.2)
gem 'launchy'
gem 'database_cleaner' (0.9.1)
gem 'factory_girl_rails'
end
ビューは次のとおりです。
<%= form_for(@user, url: sessions_path ) do |f| %>
<div class="field">
<%= f.label :group_id %><br />
<%= f.collection_select :group_id, Group.order('name asc').all, :id, :name, :prompt => "Choose your Group" %>
</div>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :phone %><br />
<%= f.text_field :phone %>
</div>
<div class="actions">
<%= f.submit 'Go !'%>
</div>
<% end %>
2 つのモデル:
class Group < ActiveRecord::Base
has_many :users
attr_accessible :name, :phone, :active
end
class User < ActiveRecord::Base
belongs_to :group
attr_accessible :name, :phone, :group_id
validates_presence_of :name, :phone, :group
end
そして対応するスペック
require 'spec_helper'
describe "Authentication" do
subject { page }
before { visit root_path }
describe "Sign in page" do
let(:submit) {'Go !'}
let(:session_new_content) { "Who's nearby"}
let(:session_show_content){ "session show"}
describe "as new user" do
describe "with valid information" do
group = Group.create(name: "Group g")
before do
select group.name, from: 'user_group_id'
fill_in 'Name', with: 'Samy'
fill_in 'Phone', with: '0642604568'
end
it "creates a user" do
expect{ click_button submit }.to change(User, :count).by(1)
end
describe "after saving the user" do
let(:user) { User.find_by_phone '0643614864'}
before do
click_button submit
end
it { should have_content session_show_content}
it { should have_content user.name}
end
end
end
end
end
これが私のspec_helper.rbです
require 'rubygems'
require 'spork'
Spork.prefork do
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
RSpec.configure do |config|
config.use_transactional_fixtures = false
config.infer_base_class_for_anonymous_controllers = false
config.order = "random"
config.include Rails.application.routes.url_helpers
config.include Capybara::DSL
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
end
Spork.each_run do
FactoryGirl.reload
end
それは何か提案ですか?