ActionController Matchers
- 路线测试您的路线。
我只是不确定它用于什么。特别是在单独的控制器单位规格中。为什么这是控制器规格?有什么关联?这不应该只是在自己的路线规范?然而在shoulda页面上,这个匹配器被列为ActionController Matcher ......
或者是ActionController负责路由所以使用这个匹配器?
如果我应该在我的控制器规格中使用此匹配器,我是否可以举例说明如何使用它?
答案 0 :(得分:2)
为什么选择匹配者' route
匹配ActionController
匹配器?
早该-匹配器' route
匹配器是ActionController
匹配器,因为它的主题可以是控制器。您可以自己指定:controller
,在这种情况下,主题并不重要:
describe 'Routing' do
it { is_expected.to route(:get, '/posts/1').to(controller: :posts, action: :show, id: 1) }
end
或者您可以为它推断:controller
:
describe PostsController do
it { is_expected.to route(:get, '/posts/1').to(action: :show, id: 1) }
end
在后一种情况下,主题(route
)的所有PostsController
都会在其上调用.controller_name
。但它使用控制器,因此它是ActionController
匹配器。
控制器规格或路由规范是route
吗?
路由是一个与控制器完全独立的Rails层,因此RSpec具有单独的控制器和路由规范,以及我如何编写它们。但我确实使用了shoulda-matchers,而且我不想输入controller:
,所以我按照上面的第二个例子制作路由规范控制器的主题。
如果您编写路由规范的方式与控制器和路由规范的主题相同,那么您可能会发现将路由示例放在控制器规范文件中很方便。在添加或删除控制器操作时,可以更轻松地使控制器和路由规范保持同步。我不反对这一点。但我要记住,控制器并不是路由规范的主题;它只是在节省你打字。
The shoulda-matchers rdoc提出了两种可能性。