Shoulda的路线匹配器是什么?

时间:2014-07-01 03:19:27

标签: ruby-on-rails ruby rspec rspec-rails shoulda

根据the shoulda page

  

ActionController Matchers

     

- 路线测试您的路线。

我只是不确定它用于什么。特别是在单独的控制器单位规格中。为什么这是控制器规格?有什么关联?这不应该只是在自己的路线规范?然而在shoulda页面上,这个匹配器被列为ActionController Matcher ......

或者是ActionController负责路由所以使用这个匹配器?

如果我应该在我的控制器规格中使用此匹配器,我是否可以举例说明如何使用它?

1 个答案:

答案 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提出了两种可能性。

相关问题