我正在尝试自定义在Vanilla Rails 5.2.x应用程序中默认生成的测试。我似乎无法配置Minitest生成器。我尝试生成模型时,config/application.rb
中的以下代码导致error minitest [not found]
错误。
config.generators do |generate|
generate.test_framework :minitest, model: false
end
在Rails 5.2中,默认测试框架为Minitest and Capybara
最小的宝石会自动包含在rails new
您可以在config.generators do
的{{1}}块中customise generator behaviour
config/application.rb
"defines which test framework to use. Defaults to false and will use Minitest by default"
很显然,我的理解存在差距,或者我的一个假设是错误的。
test_framework
奇怪的是,official Rails testing guide在单元测试和系统测试中也有很多对rails -v
# Rails 5.2.1.1
rails new testing-test-frameworks
# Bundle install outputs: 'Using minitest 5.11.3'
cd testing-test-frameworks
rails g model --help
# Default [test framework]: test_unit [why???]
rails g model person
# invoke test_unit [why???]
# create test/models/person_test.rb
# create test/fixtures/people.yml
的引用。
我在invoke test_unit
块中尝试了其他设置,只是为了确保它能正常工作
鉴于test_unit生成器似乎是不可转让的,我尝试通过test_unit更改世代。 config.generators
我试图禁用其他各种测试; config.generators.test_framework :test_unit, model: false
我试图确认自己没有其他可能会引起混乱的宝石或设置(与旧版本的FactoryBot / Girl有关的几个similar sounding problems)
我尝试了其他answers
fixture:false, integration: false, model: false, spec: false, system: false, view: false
之类的变体
答案 0 :(得分:3)
我试图根据最近的学习(并基于 Rails 6)部分回答我自己的一些问题(2 年以上)。如果我错了,希望坎宁安定律成立。
让我感到困惑的第一个大问题是 Minitest 确实是引擎盖下的默认测试框架,但 Rails 中的几乎所有内容(仍然?)似乎都引用了 TestUnit/test_unit。
示例包括:
rails g model --help
输出(下面的片段)
-t, [--test-framework=NAME] # Test framework to be invoked
# Default: test_unit
^^^^^^^^^
TestUnit options:
^^^^^^^^
rails g scaffold Example
输出(下面的片段):
create app/models/example.rb
invoke test_unit
^^^^^^^^^
create test/models/example_test.rb
invoke scaffold_controller
create app/controllers/examples_controller.rb
invoke test_unit
^^^^^^^^^
create test/controllers/examples_controller_test.rb
create app/helpers/examples_helper.rb
invoke test_unit
^^^^^^^^^
bin/rails generate test_unit:model article title:string body:text
^^^^^^^^^
果然,如果我们查看 all.rb
,我们会看到通过 test_unit
Railtie 包含“测试单元”。如果(像我一样)您真的不知道 Railtie 是什么,请查看此 blog post,我发现它很有帮助。
就我们可以在 config/application.rb
config.generators
块中提供哪些选项而言,我认为我们可以通过 config.generators.test_framework :test_unit
传递的唯一选项是 fixture: true/false
(并且可能指定一个fixture_replacement
路径(?),基于 test_unit railtie 中的明显默认值。
如果您运行 rails g
以获取可用生成器的列表,则输出中仅提及四个 TestUnit:
TestUnit:
test_unit:channel
test_unit:generator
test_unit:mailbox
test_unit:plugin
但是 Rails Testing Guide 也提到了 test_unit:model
和 test_unit:scaffold
。当我尝试 rails g test_unit:foo
时,Rails 建议也许我的意思是 rails g test_unit:job
所以这是三个“未记录的”生成器。
据我所知,这三个额外的东西来自this generators folder,以及其他一些。如果是这样,我认为完整的列表是:
test_unit:channel
*不在那个文件夹中,似乎是由
ActionCabletest_unit:controller
test_unit:generator
test_unit:helper
test_unit:integration
test_unit:job
test_unit:mailbox
*不在那个文件夹中,似乎是由ActionMailboxtest_unit:mailer
test_unit:model
test_unit:plugin
test_unit:scaffold
test_unit:system