您需要对 Rails 做什么才能使规范文件与它们描述的代码一起存在?

Pet*_*xey 4 architecture ruby-on-rails

多年来,我一直遵循 Rails 惯例,将规范文件放在规范文件夹中,并与它们描述的代码完全分开:

- app
  - controllers
    - application_controller.rb
  - models
    - user.rb
- spec
  - controllers
    - application_controller_spec.rb
  - models
    - user_spec.rb
Run Code Online (Sandbox Code Playgroud)

然而,这种方法可能会带来很多不必要的错位和混乱,我真的很喜欢 Angular 将组件、它们的规范和代码并排放置的方法。在从事过大型 Rails 项目后,规范和代码之间的错位会变得令人难以置信的混乱和迷失方向。

需要进行哪些更改才能实现这一目标?

我想尝试在 rails 中做同样的事情,并将规范移动到他们描述的文件旁边,以便目录结构更类似于:

- app
  - controllers
    - application_controller.rb
    - application_controller_spec.rb
  - models
    - user.rb
    - user_spec.rb
Run Code Online (Sandbox Code Playgroud)

我需要改变哪些事情才能使这项工作发挥作用?

想到的几件事是:

  • 确保 Zeitwerk 不会在应用加载时将规范文件加载到内存中
  • 调整守卫,使其监视正确的目录

不过,我还需要什么其他东西,有什么需要特别注意的吗?

NM *_*ker 5

这可能是可能的,但可能不切实际。

首先,假设您正在使用rspec,则必须配置/覆盖测试套件期望找到规范文件的路径,这可能并不难,但如果您使用任何扩展名rspec,(或任何其他测试套件),您必须对规范路径的任何引用进行调整,以使您的规范正确运行,这可能会增加未来的维护工作。

你也可能会无法使用发电机,除非你打补丁,当你运行一个生成器,创建规范文件中的类,因为它们会在默认情况下的能力,把规范文件spec/modelsspec/controllers等等。

覆盖这些类型的东西是可能的,但需要维护,并且可能被大多数 Rails 开发人员认为“不是 Rails 方式”。Rails 是一个固执己见的框架,也就是说,任何开发你的应用程序的开发人员几乎肯定会希望在spec默认情况下看到目录中的规范文件,因此你可能会受到未来团队成员的反对。

可能还有其他问题,但这些只是首先想到的事情。