Ruby on rails rspec上的请求规范是否有正确的文件夹/文件结构?

Ruby on rails rspec上的请求规范是否有正确的文件夹/文件结构?,ruby-on-rails,rspec,request,integration-testing,rspec-rails,Ruby On Rails,Rspec,Request,Integration Testing,Rspec Rails,使用RSpec(如果有区别的话) 我习惯于编写控制器规范,知道每个测试的位置很容易,因为我在spec/controllers中有一个每个控制器的文件。我现在开始使用请求规范,虽然起初我认为使用相同的文件结构,但现在我了解到请求规范可能在同一测试中包含对不同路由(指向不同控制器)的不同调用,现在我不知所措,无法找到适合测试的正确文件结构 假设我有一个测试,创建一个资源a(post/resource_a),然后创建一个资源B(post resource_B),然后检查在GET/resource_a/

使用RSpec(如果有区别的话)

我习惯于编写控制器规范,知道每个测试的位置很容易,因为我在
spec/controllers
中有一个每个控制器的文件。我现在开始使用请求规范,虽然起初我认为使用相同的文件结构,但现在我了解到请求规范可能在同一测试中包含对不同路由(指向不同控制器)的不同调用,现在我不知所措,无法找到适合测试的正确文件结构

假设我有一个测试,创建一个资源a(post/resource_a),然后创建一个资源B(post resource_B),然后检查在GET/resource_a/之前创建的_a_id上是否将创建的资源B作为关联的资源,所有这些端点都转到不同的控制器,我应该将此测试放在哪个文件上


当然,我可以按照我认为合适的方式来构建文件夹结构,但我喜欢约定而不是配置,而且我在其他任何地方都找不到答案。

spec/requests
是默认设置

请求规格由
:type=>:Request
标记,或者如果您设置了
config.inference\u spec\u type\u from\u file\u locationspec/requests
中进行编码>

除此之外,没有明确的指导。但按路线组织它们似乎是有道理的

假设我有一个测试,创建一个资源a(post/resource_a),然后创建一个资源B(post resource_B),然后检查在GET/resource_a/之前创建的_a_id上是否将创建的资源B作为关联的资源,所有这些端点都转到不同的控制器,我应该将此测试放在哪个文件上

这是一个测试,
/resource\u a/:id
显示其关联的资源。创建关联的资源是测试设置,除非有充分的理由,否则不应通过路由进行。这将作为resource_B的一部分进行测试

这里我假设你正在使用。如果不是,您仍然不会通过调用路由来生成测试资源,而是使用模型或控制器

# spec/requests/resource_a_spec.rb
Rspec.describe 'ResourceA management' do
  let(:resource_A) { create(:resource_a) }

  describe '/resource_A/:id' do
    context 'with a b' do
      let(:resource_B) { create(:resource_b) }

      before {
        resource_A.update!(b: resource_b)
      }

      it 'sees its associated resource' do
        get "/resource_A/#{resource_A.id}"
        ...
      end
    end
  end
end
随着对路由的测试越来越大,您可能希望将它们拆分为单独的文件。取决于你在测试什么。例如,你可以通过行动来做到这一点

spec/
  requests/
    resource_a/
      show_spec.rb    # GET /resource_A/:id
      index_spec.rb   # GET /resource_A/
      create_spec.rb  # GET /resource_A/new and POST /resource_A
      edit_spec.rb    # GET /resource_A/:id/edit and PATCH /resource_A/:id
      destroy_spec.rb # DELETE /resource_A/:id

谢谢你的回复,我像你说的那样对待这种规格,事先用FactoryBot创建数据,让我困惑的是你分享的链接,他们有例子,所以我知道他们建议在同一个环境中使用和测试多个请求spec@DJA这些示例演示了请求规范功能,每个示例控制整个文件;我不会把它们作为更大规格结构的建议。从每个资源一个文件开始,然后如果文件太大,就按照合理的方式将其拆分。