Factory Girl провалила тесты Rspec - PullRequest
18 голосов
/ 21 ноября 2011

Я пытался понять, как писать тесты, но у меня много проблем, потому что тесты никогда не подтверждают то, что я хочу.В частности, я пытался использовать Factory Girl в отличие от приборов - как это было предложено в недавних Railscasts и других советах, которые я видел в сети - из-за преимуществ, которые он исповедует, но это не сработало.

Например, вот простой тест Rspec для пользовательской модели, проверяющий наличие имени пользователя ...

describe User do
  it "should not be valid without a username" do
    user = FactoryGirl.create(:user, :username => "", :password => "secret")
    user.should_not be_valid
  end
end

И мой файл factories.rb, если это поможет...

FactoryGirl.define do
  factory :user do
    sequence(:username) { |n| "registered-#{n}" }
    password "foobar"
  end
end

Когда я запускаю 'rake spec', он говорит мне ...

1) User should not be valid without a username
     Failure/Error: user = FactoryGirl.create(:user, :username => "", :password => "secret")
     ActiveRecord::RecordInvalid:
       Validation failed: Username can't be blank

Ммм ... это ТОЧКА.Если я указал, что пользователь НЕ должен быть действительным, разве этот тест не должен пройти на самом деле?

Если я заменю строку Factory Girl и установлю пользователя в тесте на что-то вроде 'user = User.new(:username => "", :password => "secret")', не удивительнотест проходит нормально.Так почему же Factory Girl не работает правильно?

1 Ответ

22 голосов
/ 21 ноября 2011

Вы должны использовать сборку следующим образом:

user = Factory.build(:user, :username=>"foo")

Поскольку при использовании метода, который вы используете, будет пытаться создать запись.См. документы для получения дополнительной информации.

...