Подтвердить что ты не робот

Factory Проверка на неудачу Rspec для девушек

Я пытаюсь понять, как писать тесты, но у меня много проблем, поскольку тесты никогда не подтверждают то, как я их хочу. В частности, я пытался использовать 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 Девушка не работает правильно?

4b9b3361

Ответ 1

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

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

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