Próbuję utworzyć niestandardowy matcher dla moich testów w RoR przy użyciu RSpec.RSpec & Custom matcher z wieloma argumentami
define :be_accessible do |attributes|
attributes = attributes.is_a?(Array) ? attributes : [attributes]
attributes.each do |attribute|
match do |response|
response.class.accessible_attributes.include?(attribute)
end
description { "#{attribute} should be accessible" }
failure_message_for_should { "#{attribute} should be accessible" }
failure_message_for_should_not { "#{attribute} should not be accessible" }
end
end
Chciałbym móc napisać coś jak następuje w moich testów:
...
should be_accessible(:name, :surname, :description)
...
ale z dopasowującego zdefiniowanego powyżej, I musi przekazać tablicę symboli zamiast symboli rozdzielonych przecinki w przeciwnym razie test bada tylko pierwszy symbol.
Wszelkie pomysły?
Oto odpowiedź, która powinna pasować do pierwszej potrzeby: http://stackoverflow.com/a/4643289/582863. W każdym razie, jestem ciekawa twojej intencji tutaj ... Czy chcesz tylko zmniejszyć liczbę linii w plikach testowych rspec, czy też twój kompleks testowy ma dostęp do atrybutów modelu? – Saaman
Problem z podanym linkiem polega na tym, że nie jest to "zwykła" metoda def, więc nie mogę użyć znaku *. Odpowiadając na twoje pytanie, chcę tylko zmniejszyć linie mojego rspec :) –