тестирование: reject_if в anaf - PullRequest
6 голосов
/ 14 декабря 2010

У меня есть модель пользователя

class User < ActiveRecord::Base
  has_many :languages, :dependent => :destroy
  accepts_nested_attributes_for :languages,   :reject_if => lambda { |l| l[:name].blank? }
end

Я хочу протестировать часть reject_if с RSpec 2.0.0. В настоящее время у меня есть два простых теста для этого

  it "should not save language without name by accepts_nested_attributes" do
    lambda {
      @user.update_attributes!("languages_attributes"=>{"0"=>{}})
    }.should_not change(Language, :count)
  end

  it "should save language with name by accepts_nested_attributes" do
    lambda {
      @user.update_attributes!("languages_attributes"=>{"0"=>{"name"=>"lang_name"}})
    }.should change(Language, :count).by(1)
  end

Однако я довольно новичок в тестировании, и это выглядит очень странно. Интересно, это правильный способ проверить reject_if? И есть ли лучший способ сделать это?

1 Ответ

10 голосов
/ 14 декабря 2010

Я вижу, что вы хотите проверить reject_if, тогда лучший способ сделать это - проверить его напрямую:

anaf_for_languages = User.nested_attributes_options[:languages]
anaf_for_languages[:reject_if].call({ "name" => "" }).should be_true

Если это true, то name пусто. Я думаю, что это немного более лаконично, чем ваш код, но не так очевидно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...