Как проверить коллекции ActiveRecords в rspec? - PullRequest
3 голосов
/ 15 августа 2011

Мне нравится RSpec, и мне действительно нравится его =~ средство сравнения операторов массива, чтобы убедиться, что массив содержит определенный набор элементов, независимо от порядка.

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

class Flea < ActiveRecord::Base ; end
class Dog < ActiveRecord::Base
  has_many :fleas
end

@d = Dog.create
@d.fleas << (@f1 = Flea.create)
@d.fleas << (@f2 = Flea.create)

@d.fleas.should =~ [@f1, @f2]

Так что я часто пишу это в своих тестах RSpec:

@d.fleas.map {|f| f.id}.should =~ [@f1.id, @f2.id]

... что пахнет неприятный запах кода .Предоставляет ли RSpec лучший способ проверки коллекции объектов ActiveRecord независимо от возвращаемого порядка?Или, по крайней мере, есть более красивый способ написания такого теста?

1 Ответ

4 голосов
/ 15 августа 2011

ActiveRecord :: Отношения не работают как массивы (как вы узнали). См. Проблема № 398 на доске объявлений GitHub RSpec-Rails .

Ответ заключается в добавлении этой строки кода к вашему spec_helper.rb:

RSpec::Matchers::OperatorMatcher.register(ActiveRecord::Relation, '=~', RSpec::Matchers::MatchArray)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...