这可能与“<a href="https://stackoverflow.com/questions/11179737/inconsistent-behavior-when-referencing-constants-inside-a-module">在模块内引用常量时的行为不一致”类似的问题”,但我不确定。
我处于我的测试有效但我的应用程序失败的情况,虽然我可以修复应用程序,但如果应用程序成功,我宁愿进行一个失败的测试!
这是基本设置:
admin_controller.rb(类似ApplicationController,其他控制器继承)
class AdminController < ActionController::Base
# If a session_grouping is set, it should be used until unset.
def session_grouping
session[:default_grouping] || DraftGrouping.new
end
...
end
admin_controller_test.rb
require 'test_helper'
class AdminControllerTest < ActionController::TestCase
def test_get_session_grouping
assert_equal DraftGrouping, @controller.session_grouping.class, 'without a grouping set, a draft grouping should be returned'
end
...
end
该测试(以及为清楚起见我已排除的其他测试)全部通过,DraftGrouping
定义如下:
分组.rb
class Grouping < ActiveRecord::Base
...
end
# Used as a stand-in for a real grouping until there is something to save.
class DraftGrouping
# Any call to real_grouping instantiates the grouping in the database.
def real_grouping
@real_grouping || @real_grouping = Grouping.create!
end
...
end
但是,在应用程序中使用时,会AdminController#session_grouping
失败并显示消息NameError (uninitialized constant AdminController::DraftGrouping): app/controllers/admin_controller.rb:5:in
session_grouping'`
DraftGrouping
我可以通过在内部定义Grouping
并在任何地方调用来解决所有这些问题Grouping::DraftGrouping
。现在实际上这是一种更清晰的做事方式,所以我很乐意这样做。但是我应该如何为此建立一个失败的测试呢?