无法在测试文件夹下使用紧凑样式的模块和 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
的模块。
我有文件夹内部人员 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
的模块。