A few months ago I asked around to find out how (or whether) people organised the Cucumber feature files in their project’s
features folder. Nothing in particular turned up. But yesterday the good folks at Thoughtbot posted their own very interesting convention: They have a sub-folder of
features/ for each Actor served by the application. For example:
features/admins/ features/api_clients/ features/users/ features/visitors/
I like this a lot, and I’ll be re-organising Reek’s features soon along the same lines. In fact, thinking about this has made me realise that there’s a whole class of user (API clients) not represented by Reek‘s current set of Cucumber features.
And here’s an interesting thought experiment I’ll also be trying out: How about adding another folder level for the Actor’s goal? So the folders would be organised according to the commonalities among the feature descriptions:
features/<as_a>/<in_order_to>/feature. For example:
features/ administrator/ manage_products/ create_catalogue.feature retire_product_line.feature ... manage_users/ grant_access.feature ...
Will that be useful, or just create more clutter? In general I dislike hierarchical classification, so I was keen to keep the sub-folder names as verbs. I’ll try it for Reek and report my feelings back here. Please let us know if you try it first…