У меня есть один к многим в Rails:Зачем находить (: последний) сбой в моих модульных тестах?
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
который терпит неудачу на указанная строка, но я не могу понять, почему.
Кроме того, использование activity.find (: last) работает при использовании среды разработки, но только не выполняется в тестовой среде. Я сбросил и перестроил базу данных.
прямо перед проблематичной линией, что делает «puts alice.activities.inspect» print? – Tony
также, попробуйте сортировать специально «created_at» и посмотрите, есть ли у вас такая же проблема – Tony
, вам также не нужно искать (: сначала) или найти (: последний), просто выполните alice.activities.first или alice. activities.last =) – Staelen