无法在测试文件夹下使用紧凑样式的模块和 class (NameError)

unable to use a compact style of module and class under test folder (NameError)

我有文件夹内部人员 test/fixtures/schemas,我在其中定义了一些模式,用于验证某些控制器的 JSON 响应,如下所示:

test
  |
  |
  controllers
  |
  |
  ....
  fixtures
         |
         |
         organizations.yml
         |
         |
         schemas
               |
               |
               clients
                     |
                     |
                     show.rb
               |
               |
               organizations
               ...

fixtures/schemas/client/show.rb 下的文件如下所示:

module Clients
  class Show < Dry::Validation::Contract
    json do
      required(:id).filled(:string)
      required(:state).filled(:string)
...

它工作正常,我可以在 Clients::Show 的测试中使用这个模式,但我们也有一个 rubocop 规则强制我们使用紧凑模块和 class 样式,如下所示:

class Clients::Show < Dry::Validation::Contract

但是当我这样定义它时,我得到一个 NameError

test/fixtures/schemas/client/show.rb:3:in `<top (required)>': uninitialized constant Client (NameError)

我觉得奇怪的是一种结构有效而另一种无效。我通读了 Zeitwerk 手册,但无法解释我的问题,并尝试了不同的方法,例如用空模块定义 client.rb 文件,但它没有用。

两个版本不一样。

module Clients
  class Show

在命名空间 Clients 中定义了一个名为 Clients a class Show 的模块。但是

class Clients::Show

只在命名空间Clients中定义了一个classShow。在这种情况下,不会自动定义名称为 Clients 的模块。