Я создал тесты rspec для своих областей (scope1
, scope2
и scope3
), и они проходят как ожидалось, но я также хотел бы добавить некоторые тесты для метода класса, который у меня есть что на самом деле вызывается из моего контроллера (контроллер вызывает области косвенно через этот метод класса):Использование rspec для проверки методов класса вызывает вызовы
def self.my_class_method(arg1, arg2)
scoped = self.all
if arg1.present?
scoped = scoped.scope1(arg1)
end
if arg2.present?
scoped = scoped.scope2(arg2)
elsif arg1.present?
scoped = scoped.scope3(arg1)
end
scoped
end
Это кажется немного излишним для выполнения тех же тестов области видимости для каждого сценария в этом методе класса, когда я знаю, что они уже поэтому я предполагаю, что мне действительно нужно только обеспечить, чтобы различные области назывались/применялись в зависимости от аргументов, передаваемых в этот метод класса.
Может кто-нибудь посоветует, как будет выглядеть этот тест rspec.
Я думал, что это может быть что-то вдоль линий
expect_any_instance_of(MyModel.my_class_method(arg1, nil)).to receive(:scope1).with(arg1, nil)
, но это не работает.
Я также благодарен за подтверждение того, что это все, что необходимо для проверки в этой ситуации, когда я уже проверил области, так или иначе, будет реанимация.
Thanks @ rob-w. Мне просто интересно, если у меня есть тесты уже для каждой из областей, следует ли их изменить, чтобы использовать 'shared_examples' /' behaves_like', чтобы их можно было повторно использовать соответствующим образом для этого метода класса на основе аргументов, применяемых к классу метод ... если это имеет смысл? – user1116573
@ user1116573 Да, это имеет смысл и приведет к очень чистому тестовому коду. Просто имейте в виду, что вы будете связывать тесты с методами «scope1» и «scope2» через 6 месяцев, если вы или кто-то другой измените то, что «scope1» выполняет и исправляет тесты «scope1» соответственно, тесты «my_class_method» 'пройдет и. Это может быть хорошо или плохо, в зависимости от бизнес-логики. –