1

这可能与“<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:insession_grouping'`

DraftGrouping我可以通过在内部定义Grouping并在任何地方调用来解决所有这些问题Grouping::DraftGrouping。现在实际上这是一种更清晰的做事方式,所以我很乐意这样做。但是我应该如何为此建立一个失败的测试呢?

4

1 回答 1

1

你是在指定DraftGrouping范围内grouping.rb吗?看起来您可能来自您的代码示例。

如果是这样,Rails 的自动加载例程在尝试在admin_controller.rb. 如果您的测试已经被引用Grouping(因此已经加载了 grouping.rb 和 的定义DraftGrouping),您的测试可能会通过。

我要尝试的第一件事是将 DraftGrouping 的定义移动到draft_grouping.rb.

于 2013-10-31T11:36:06.237 回答