I’d like to DRY out my controller specs but am having difficulties doing
so and am hopeful that a more experienced rspec expert can shed some
much-needed light on my woes…
The controllers themselves are using josevalim’s wonderful
inherited_resources gem, so they are incredibly small - I’m basically
looking for something like this on the rspec side…
I’m hoping to find a way to:
-
Define a set of shared examples for each of the 7 common RESTful
actions (index, show, new, edit, create, update, destroy) -
include those shared examples in a number of controllers
(ApplesController, OrangesController) -
obviously have the shared examples know about the model names,
something like:assigns[@model_name.to_sym].should be_new_record # e.g. GET xxx/new
-
not so obviously have the description of the example reflect the model
names:it “should delete the #{@model_name}” do
-
be very DRY: Ideally, apples_controller_spec and
oranges_controller_spec would be small: mostly about initialization of
config (e.g. the model name) and include the various shared specs which
tested the controller.
I’ve played around with a lot of approaches, but cannot figure out a
clean pattern in which variables such as @model_name are scoped visible
to the ‘it’ descriptions AND the example blocks. I’m probably missing
some wonderful clean ruby-way of doing this.
Thoughts/advice much appreciated!
-Eric