J'ai un à plusieurs dans Rails:Pourquoi trouver (: last) échouer dans mes tests unitaires?
class User < ActiveRecord::Base
has_many :activities, :order => "added_at DESC"
class Activity < ActiveRecord::Base
belongs_to :user
J'ai une méthode à l'activité:
def self.test_message(user, message)
user.activities << Activity.create do |activity|
activity.message = message
activity.added_at = Time.now
end
end
et le test unitaire suivante:
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
qui échoue sur la ligne indiquée, mais je ne peux pas comprendre pourquoi.
De plus, l'utilisation de activities.find (: last) fonctionne lors de l'utilisation de l'environnement de développement, mais échoue uniquement dans l'environnement de test. J'ai laissé tomber et reconstruit la base de données.
juste avant la ligne problématique, que signifie "puts alice.activities.inspect"? – Tony
aussi, essayez de trier spécifiquement par "created_at" et voyez si vous avez le même problème – Tony
vous n'avez pas à faire find (: first) ou find (: last), faites juste un alice.activities.first ou alice. activities.last =) – Staelen