我有以下的ActiveRecord類:如何使用Shoulda測試引用class屬性的named_scope?
class User < ActiveRecord::Base
cattr_accessor :current_user
has_many :batch_records
end
class BatchRecord < ActiveRecord::Base
belongs_to :user
named_scope :current_user, lambda {
{ :conditions => { :user_id => User.current_user && User.current_user.id } }
}
end
,我嘗試使用Shoulda測試named_scope :current_user
但下面不工作。
class BatchRecordTest < ActiveSupport::TestCase
setup do
User.current_user = Factory(:user)
end
should_have_named_scope :current_user,
:conditions => { :assigned_to_id => User.current_user }
end
它不工作的原因是因爲被定義的類時,在should_have_named_scope
方法User.current_user
呼叫正在評估,我在運行時在setup
塊改變current_user
值之後測試。
這裏是我沒拿出來測試這個named_scope:
class BatchRecordTest < ActiveSupport::TestCase
context "with User.current_user set" do
setup do
mock_user = flexmock('user', :id => 1)
flexmock(User).should_receive(:current_user).and_return(mock_user)
end
should_have_named_scope :current_user,
:conditions => { :assigned_to_id => 1 }
end
end
那麼你會如何測試這個使用Shoulda?
Ruby邏輯運算符(&&,||)不符合您的建議。他們返回評估的最後一個參數。因此,如果User.current_user或User.current_user.id是一個布爾值,那麼current_user代碼將只返回一個布爾值 - 我認爲情況並非如此。 – Chuck 2009-01-22 00:36:40
哎呀,你是對的!清晨喝酒沒有幫助我的Ruby技能。 – 2009-01-22 03:25:21