I believe this is a missing feature/bug, but when I tried to file an
issue (isolated engine, routing helpers, testing? · Issue #6573 · rails/rails · GitHub) I was told to post
it here instead. So, okay, doing my duty! I suspect that nobody will
pay any attention to this, and a year from now when someone google’s
for this issue this post is going to be all they find, but I’d love to
be proven wrong!
I believe there is no way using the standard supported Rails testing
framework to test routes from an isolated
engine. Or to test helpers
that use these routes.
I believe there is no way to test isolated engine helpers or use
isolated engine helpers in tests. But I’d be pleased if I’m wrong and
I’m just missing something.
If you create an isolated engine, then the dummy app has a config/
routes that has for instance mount Widget::Engine => “/widget”
If the Widget engines has it’s own config/routes, then ordinarily an
app with that line in it would be able to access the engine’s route
path helpers as widget.some_path.
That works in the app. But it does not work in the test environment.
No such method widget, the widget. method isn’t installed in the test
environment.
The main engine root widget_path => /widget is installed in the
testing environment, you can use it in tests and test routing
involving that named helper and path. But not any of the specific
widget routes that would ordinarily, in an actual app, be available at
widget.some_path.
Phew, this is confusing to talk about, hope this is understandable.
I guess I’ll keep hacking away at it and looking at Rails source,
maybe file a pull request if I can figure out what’s going on, but
this is very convoluted code, even before you pull the testing
environment into it.