在RSPEC上有正确的文件夹/文件结构?

问题描述 投票:0回答:1

使用RSPEC(如果有所不同)

我曾经用来编写控制器规格,并且知道每个测试的位置很容易,因为我刚刚在每个控制器内有一个文件

spec/controllers

。我现在开始使用请求规格,尽管起初我认为使用相同的文件结构,但我现在阅读该请求规格可以包含
same测试中的不同路由(指向不同的控制器)的不同调用,现在我很茫然,找不到测试的正确文件结构。 say我有一个测试,可以创建资源A(post /resource_a),然后创建资源b(post resource_b),然后检查在get /resource_a /preat_created_a_id上,我将创建的资源b作为关联资源,然后端点转到不同的控制器,我应该在哪个文件上进行此测试?

我当然可以像我所看到的那样构成文件夹结构,但是我喜欢惯例而不是配置,我找不到其他任何地方的回答。

spec/requests
ruby-on-rails rspec request integration-testing rspec-rails
1个回答
2
投票
从文档

...


type:request.infer_spec_type_from_file_location!通过将它们放在规格/请求中。

除此之外,没有明确的指导。但是通过路线组织它们似乎很有意义。

say ay ase我有一个测试,可以创建资源a(post /resource_a),然后创建资源b(post resource_b),然后在get /resource_a /preat_created_a_id上检查我将创建的资源b作为关联资源,所有这个终点是转到不同的控制器,我应该在哪个文件上进行此测试?

这是一个显示其关联资源的测试。创建关联的Resource_b是测试设置,除非有充分的理由,否则不应通过路线进行。这将作为Resource_B.

的一部分进行测试。
在这里,我假设您正在使用

factorybot。如果不是,您仍然不会通过调用路线来制作测试资源,而是通过使用模型或控制器来进行测试。

/resource_A/:id

随着路线的测试增长,您可能需要将它们分为单独的文件。取决于您要测试的内容。例如,您可以通过行动进行操作。

# 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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.