атрибуты, когда я пытаюсь это Что может быть не так?

ли в Rspec хороший способ сравнить два объекта ActiveRecord, игнорируя id и т. Д.? Например, скажем, я анализирую один объект из XML и загружаю другой из фиксатора, и я проверяю, что мой анализатор XML работает правильно. То, что у меня сейчас есть, это пользовательское сопоставление

actual.attributes.reject{|key,v| %w"id updated_at created_at".include? key } == expected.attributes.reject{|key,v| %w"id updated_at created_at".include? key }

Но мне интересно, есть ли лучший способ.

А потом немного сложнее, но есть ли способ сделать аналогичную вещь наустановлен? Скажем, синтаксический анализатор XML также создает несколько объектов, которые принадлежат исходному объекту. Поэтому набор, которым я заканчиваю, должен быть идентичным, за исключением id, create_at и & c, и мне интересно, есть ли хороший способ проверить это, кроме циклического прохождения, очистки этих переменных и проверки.

Ответы на вопрос(1)

Решение Вопроса

actual.attributes.except(:id, :updated_at, :created_at).

Если вы часто используете это, вы всегда можете определить свой собственный сопоставитель следующим образом:

RSpec::Matchers.define :have_same_attributes_as do |expected|
  match do |actual|
    ignored = [:id, :updated_at, :created_at]
    actual.attributes.except(*ignored) == expected.attributes.except(*ignored)
  end
end

Поместите это в свойspec_helper.rb Теперь вы можете сказать в любом примере:

User.first.should have_same_attributes_as(User.last)

Удачи.

 zishe26 сент. 2012 г., 15:19
для меня это работает только с кавычками["id", "updated_at", "created_at"]
 mrzasa30 янв. 2013 г., 16:11
Чтобы заставить его работать как со строками, так и с символами, вы можете использовать HashWithIndifferentAccess:actual.attributes.with_indifferent_access.except....
 Indika K04 дек. 2013 г., 09:35
я получилundefined methodатрибуты, когда я пытаюсь это Что может быть не так?

Ваш ответ на вопрос