使用RSPEC(如果有所不同)
我曾经用来编写控制器规格,并且知道每个测试的位置很容易,因为我刚刚在每个控制器内有一个文件spec/controllers
。我现在开始使用请求规格,尽管起初我认为使用相同的文件结构,但我现在阅读该请求规格可以包含same测试中的不同路由(指向不同的控制器)的不同调用,现在我很茫然,找不到测试的正确文件结构。 say我有一个测试,可以创建资源A(post /resource_a),然后创建资源b(post resource_b),然后检查在get /resource_a /preat_created_a_id上,我将创建的资源b作为关联资源,然后端点转到不同的控制器,我应该在哪个文件上进行此测试? 我当然可以像我所看到的那样构成文件夹结构,但是我喜欢惯例而不是配置,我找不到其他任何地方的回答。
spec/requests
...
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