سؤال

لدي علاقة واحدة في القضبان:

class User < ActiveRecord::Base
  has_many :activities, :order => "added_at DESC"


class Activity < ActiveRecord::Base
  belongs_to :user

لدي طريقة في النشاط:

def self.test_message(user, message)
  user.activities << Activity.create do |activity|
    activity.message = message
    activity.added_at = Time.now
  end    
end

واختبار الوحدة التالية:

require 'test_helper'

class ActivityTest < ActiveSupport::TestCase

  def test_test_message
    #From fixture
    alice = User.find_by_name("alice")
    assert_equal 0, alice.activities.count

    Activity.test_message(alice, "Hello")
    assert_equal 1, alice.activities.count

    Activity.test_message(alice, "Goodbye")
    assert_equal 2, alice.activities.count
    assert_equal "Hello", alice.activities.find(:first).message

    #The following line fails with: Goodbye expected but was Hello
    assert_equal "Goodbye", alice.activities.find(:last).message,
    acts = alice.activities
    assert_equal 2, acts.count
    assert_equal "Goodbye", acts[1].message
  end
end

الذي فشل في الخط المشار إليه، لكنني لا أستطيع العمل لماذا.

أيضا، باستخدام الأنشطة. يعمل (: LAST) يعمل عند استخدام بيئة التطوير، ولكن فشل فقط في ظل بيئة الاختبار. لقد سقطت وإعادة بنائها قاعدة البيانات.

هل كانت مفيدة؟

المحلول

يبدو أن هذه مشكلة باستخدام علامة: طلب الطلب في إعلان جمعية الخاص بك. هذا المنصب ليس الوضع الدقيق الذي تواجهه، لكنه يوصي بممارسة العملية بشكل عام:

http://weblog.jamisbuck.org/2007/1/18/activerecord-association-scoping-pitalls.

(لست متأكدا مما إذا كانت هذه الاقتراحات لا تزال ذات صلة، لكنني أرى نفس السلوك كما كنت في القضبان 2.3.3 حتى تصنع التغييرات أدناه.)

أقضيت تطبيقك محليا وحاول تطبيق التقنية من التعليق رقم 4 عن طريق إضافة

def Activity.by_added_at
  find :all, :order => 'added_at DESC'
end

وتغيير بحثك (: أولا) والعثور على (: آخر) في الاختبار إلى .by_added_at.first و .by_added_at.last، والتي ترجع نتائج أكثر استقرارا.

اقتراح واحد آخر - اختبارك كبير جدا الآن. قد تفكر في تقسيمها إلى اختبارات متعددة، كل منها يختبر شرطين أو حالتين على الأكثر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top