У меня есть различные контроллеры, и у меня есть тесты для каждого из них, которые проверяют их действие обновления. Все тесты имеют одинаковую структуру: он проверяет, будет ли запрос на исправление обновлять и изменять объект, или нет. Единственное различие между этими тестами состоит в том, какие атрибуты проверяют проверки, чтобы увидеть их утверждение об изменениях. Эти атрибуты являются уникальными для контроллеров.
class CarsController
def update
# update attribute
...
end
end
и
class DogsController
def update
# update attribute
...
end
end
Мои тесты (еще 2):
CarsSpec
describe "PATCH" do
it "should update the car" do
expect do
patch :update, id: object.id, data: {make: "honda"}
end.to change {object.reload.make}
end
end
DogSpec
describe "PATCH" do
it "should update the dog" do
expect do
patch :update, id: object.id, data: {breed: "husky"}
end.to change {object.reload.breed}
end
end
Как вы видите, они представляют собой точно такую же структуру тестов, поэтому, естественно, чтобы они были СУХИМЫМИ, я хочу выделить их в shared_example, чтобы они были СУХИМЫМИ. Идея состоит в том, чтобы иметь гораздо больше таких контроллеров, но только реальных тестов и чтобы эти контроллеры просто передавали в какое поле обновляться. Это будет включать что-то вроде
shared_example "update" do
it "updates the object" do
expect do
patch :update, id.object.id, data: { customField: "new value" }
end.to change { object.reload.customField }
end
end
Где в этом случае customField может быть либо размножен, либо изготовлен, и тест будет знать, как обновить эти поля, чтобы он был универсальным и мог применяться ко многим из этих контроллеров. Как мне достичь этого или что-то подобное?