Ошибка проверки на связанной фабрике при использовании FactoryGirl с RSpec - PullRequest
1 голос
/ 23 марта 2012

Я новичок в использовании RSpec и FactoryGirl.Я пытаюсь добавить тесты RSpec в существующую кодовую базу.

У меня определены следующие фабрики:

Factory.sequence :email do |n|
  "somebody#{n}@example.com"
end

Factory.sequence :login do |n|
  "inquire#{n}"
end

Factory.define :user do |f|
  f.login { Factory.next(:login) }
  f.email { Factory.next(:email) }
  f.password 'inquire_pass'
  f.password_confirmation 'inquire_pass'
  f.first_name 'test'
  f.last_name 'guy'
  f.newsletter true
  f.notify_of_events true
  f.terms_of_service true
end

Factory.define :project do |project|
  project.title               "Example Project Title"
  project.association         :user
  project.association         :provider
  project.association         :project_request
  project.association         :offering
  project.association         :offering_type
end

Однако, когда я пытаюсь создать фабрику Project в моих тестах и ​​назначить@project:

require 'spec_helper'

describe Charge do
    before(:each) do
        @provider_user = Factory(:user)
        @provider = stub_model(Provider, :user => @provider_user)
        @user = Factory(:user)
        @project_request = stub_model(ProjectRequest)
        @project = Factory(:project, :user => @user, :provider => @provider, :offering_fixed_fee_number => 700,
                                     :project_request_id => @project_request.id)
        @attr = {
          :user_id => @user.id,
          :provider_id => @provider.id,
          :charge_client => "0.01"
        }
        @charge = @project.build_charge(@attr)
    end

При выполнении тестов появляется сообщение об ошибке, указывающее, что проверки для связанного пользователя не пройдены:

Validation failed: User email can't be blank, User email is too short (minimum is 3 characters), User email does not look like a valid email address., Login can't be blank

Соответствующие проверки в модели пользователяявляются:

  validates_presence_of     :login, :email
  validates_uniqueness_of   :login, :email, :case_sensitive => false

  validates_length_of       :login, :within => 5..20   
  validates_format_of       :login, :with => /^[a-z0-9-]+$/i, :message => 'may only contain letters, numbers or a hyphen.'

  validates_length_of       :email, :within => 3..100
  validates_format_of       :email, :with => Authentication.email_regex, :message => 'does not look like a valid email address.'

Я могу создавать действующие фабрики пользователей (сами по себе) без проблем.Но когда я пытаюсь создать проекты, в которых есть пользовательская ассоциация, и указываю ассоциированного пользователя в качестве фабричного пользователя, которого я создал ранее, проверки этого пользователя не пройдены.Есть идеи, что мне здесь не хватает?

Большое спасибо,

Дин Ричардсон

1 Ответ

0 голосов
/ 24 марта 2012

Может быть, это потому, что отсутствует factory параметр в association методе:

Factory.define :project do |project|
  project.association :user, :factory => :user
  ...
end

Но в этом случае его можно было бы написать более просто:

Factory.define :project do |project|
  project.user
  ...
end

См. Factory Girl.Начало работы

...