当我向rails test
命令添加特定文件或目录以运行控制器测试时,我得到以下错误:
/Users/foobar/name_of_app/test/application_controller_test_case.rb:1:in `<main>':uninitialized constant ActionDispatch (NameError)
class ApplicationControllerTestCase < ActionDispatch::IntegrationTest
你知道是什么导致了这个问题,以及如何解决它?
我在macOS 13.3.1上使用Ruby 3.1.2运行Rails 7.0.1。我的测试是迷你测试。
当我运行bin/rails test
时,所有测试都按预期运行。
当我运行bin/rails test test/models
或bin/rails test test/system
时,预期的测试子集按预期运行。
但是,当我运行bin/rails test test/controllers/day_controller_test.rb
时,我得到上面的“未初始化常量”错误。事实上,无论我使用什么作为第三个参数(文件名、目录名、file_name:line_number),都会得到一个错误。这个错误让我认为,当我只在controllers
目录中指定测试时,某些(或全部)Rails没有被加载。或者,可能是模型和/或系统测试之一导致加载丢失的文件。你知道如何解决这个问题吗?
1条答案
按热度按时间xdyibdwo1#
简短的回答是,我有一个缺失的
require 'test_helper'
语句。(@Spickermann给了我关键线索。)问题是:我的控制器测试都继承自我写的父类:
ApplicationControllerTestCase
。父类继承自ActionDispatch::IntegrationTest
;但是,我没有从ApplicationControllerTestCase
得到require 'test_helper'
。因此,当我单独运行一个控制器测试用例时,我得到了uninitialized constant
错误。我不太确定“魔术”发生的顺序,但是当我使用
bin/rails test
运行所有测试时,在测试运行程序到达我的控制器测试之前,必需的文件是必需的。