Cucumber: Factory Girl не изменяет базу данных - создает объект с помощью .create, но таблица базы данных все еще пуста - PullRequest
3 голосов
/ 08 сентября 2011
  p = Factory(:model) 

  ap Model.find(:all)  #output to prove that it's getting created

итак ... печать показывает, что идентификаторы объектов увеличиваются .... но база данных остается пустой, так как я постоянно обновляю представление на MySQL Workbench - так что мои тесты на огурец терпят неудачу, потому что контроллеры тянут вещи из базы данных ... но в базе ничего нет! = (* * Тысяча два

My Gem file: test

group :test do
    gem "cucumber", "~>0.10.3"
    gem "cucumber-rails", "0.3.2"
    gem "launchy"
    gem "hpricot"
    gem "gherkin", "~>2.4.0"

    gem "capybara", "0.4.1.2"
    gem "rspec", "1.3.2"
    gem "rspec-rails", "1.3.2"
    gem "rspec-core"
    gem "rspec-expectations"

    gem "webrat", "0.7.0"
    gem "database_cleaner"

    gem "factory_girl", "1.2.4"
    gem "shoulda", :require => nil
    gem "shoulda-matchers", :git => "https://github.com/thoughtbot/shoulda-matchers"
    gem "awesome_print"
    gem "cobravsmongoose"
end

Мой Требуется для env.rb (огуречный env)

ENV["RAILS_ENV"] = 'test'
ENV["RACK_ENV"] = 'test'

BASE_DOMAIN = "myapp.dev" #using POW

require File.expand_path(File.dirname(__FILE__) + '/../../config/environment')

require 'cucumber/formatter/unicode' # Remove this line if you don't want Cucumber Unicode support
require 'cucumber/rails/world'
require 'cucumber/rails/active_record'
require 'cucumber/web/tableish'
require 'cucumber/rails/rspec' 
require 'rake'

require 'shoulda'
require 'factory_girl'
require 'factory_girl/step_definitions'
require 'awesome_print'


require 'capybara/rails'
require 'capybara/cucumber'
require 'capybara/session'

А в envs / test.rb

Bundler.require(:test) #just in case I forgot something

EDIT:

Некоторый вывод на консоль Factory (: модель) .errors =>

#<ActiveRecord::Errors:0x10c5a6498 @base=#<ModelName id: 1, name: "Ready or not", status: 0, account_id: 2, user_id: 1, created_at: "2011-09-08 15:09:05", updated_at: "2011-09-08 15:09:05", description: "Things are not as they used to be", value: #<BigDecimal:10cb2c188,'0.12345E5',9(18)>, category_id: nil, allow_downloads: true, visibility: 1, locked: nil>, @errors=#<OrderedHash {}>>

И, глядя на консоль во время выполнения, этот объект def попадает в команду INSERT INTO ... но есть это:

RELEASE SAVEPOINT active_record_1
  SQL (1.3ms)   ROLLBACK

Что, я чувствую, может быть причиной проблемы ... своего рода упреждающий откат.

Ответы [ 4 ]

3 голосов
/ 08 сентября 2011

в functions / support / env.rb убедитесь, что у вас есть

# This will prevent the deletion of the data written in the test db until the end of the 
# cucumber feature
Cucumber::Rails::World.use_transactional_fixtures = false

по умолчанию это правда, поэтому похоже, что в БД ничего не идет.

3 голосов
/ 09 сентября 2011

Попробуйте это тогда:

в env.rb

require 'database_cleaner'
require 'database_cleaner/cucumber'
DatabaseCleaner.strategy = nil
1 голос
/ 08 сентября 2011

Я бы начал с проверки наличия ошибок проверки при сохранении объекта, т. Е.

p Factory(:model).errors

, а затем, если их нет, начал наблюдать за тем, что делает активная запись, добавив регистраторв stdout:

ActiveRecord::Base.logger = Logger.new(STDOUT)

и используя его, чтобы убедиться, что данные записываются в базу данных.

В прошлом я попытался бы обновить версию FactoryGirl до 2.1 и посмотретьэто имеет значение.

0 голосов
/ 27 января 2013

В файле features / support / env.rb вы должны установить DatabaseCleaner.strategy =: усечение

...