這可能與「Inconsistent behavior when referencing constants inside a module」類似,但我不確定。如何建立一個失敗的測試?測試通過但Rails服務器說:'未初始化常量'
我處於測試工作但我的應用程序失敗的情況下,雖然我可以修復應用程序,但我寧願有一個測試失敗,如果應用程序!
這裏的基本設置:
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
定義如下:
grouping.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
。實際上,無論如何,這是一個更清晰的做法,所以我很樂意做到這一點。但是,我應該如何爲此建立一個失敗的測試?
是的,這絕對有道理。我會放棄它。 – Leo
然而,我的問題是,測試如何設法加載'DraftGrouping'。即使只是隔離運行測試,所以我想** test_helper.rb **加載環境的方式必須與服務器有所不同,這似乎可能會引入不一致。 – Leo
感謝您對此的意見。您的方法可以修復應用程序中的錯誤,並幫助我更好地理解自動加載。但是,我的問題確實是如何爲此構建一個失敗的測試。我的全堆棧集成測試也不會失敗,所以我不知道如何在沒有手動測試的情況下發現這個問題。 – Leo