Рельсы 3.0.3 ....
Я только начинаю с Factory Girl, но добился небольшого успеха со стандартным подходом к приборам. Я закомментировал fixtures :all
из файла test / test_helper.rb и создал файл фабрики.
Моя проблема в том, что функция последовательности не работает:
# test/factories.rb
Factory.sequence :clearer_name do |n|
"Clearer_#{n}"
end
Factory.define :clearer do |f|
f.name Factory.next(:clearer_name)
end
Мой (функциональный) тест незначительно отличается от стандартного:
require 'test_helper'
class ClearersControllerTest < ActionController::TestCase
setup do
@clearer = Factory.create(:clearer)
end
test "should get index" do
get :index
assert_response :success
assert_not_nil assigns(:clearers)
end
test "should get new" do
get :new
assert_response :success
end
test "should create clearer" do
assert_difference('Clearer.count') do
post :create, :clearer => @clearer.attributes
end
assert_redirected_to clearer_path(assigns(:clearer))
end
Когда я бегу rake test
, я получаю:
test_should_create_clearer(ClearersControllerTest):
ActiveRecord::RecordNotUnique: SQLite3::ConstraintException: column name is not unique: INSERT INTO "clearers" ("active", "updated_at", "name", "created_at") VALUES ('t', '2011-02-20 08:53:37.040200', 'Clearer_1', '2011-02-20 08:53:37.040200')
... как будто это не продолжение последовательности.
Какие-нибудь советы?
Спасибо
ОБНОВЛЕНИЕ : вот мой тестовый файл:
#clearers_controller_test.rb
require 'test_helper'
class ClearersControllerTest < ActionController::TestCase
setup do
@clearer = Factory.create(:clearer)
end
test "should create clearer" do
assert_difference('Clearer.count') do
# does not work without this:
Clearer.destroy_all
post :create, :clearer => @clearer.attributes
end
end
Я могу заставить это работать, поместив Clearer.destroy_all
в верхней части метода тестирования, как показано, но это не так.