Domanda

Ho una relazione in Rails:

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


class Activity < ActiveRecord::Base
  belongs_to :user

Ho un metodo in Attività di:

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

e le seguenti unità di test:

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

che non riesce nella riga indicata, ma non riesco a capire il perché.

Inoltre, l'utilizzo di attività.trovare(:ultima) funziona quando si utilizza l'ambiente di sviluppo, ma non solo sotto l'ambiente di test.Ho abbandonato e ricostruito il database.

È stato utile?

Soluzione

Questo sembra essere un problema con l'utilizzo di :ordinanza bandiera nella vostra associazione, dichiarazione.Questo post non è esattamente la situazione che stai vivendo, ma si sconsiglia la pratica in generale:

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

(Non sono sicuro se questi suggerimenti sono ancora rilevanti, ma ho visto lo stesso comportamento in Rails 2.3.3 fino a quando ho fatto le modifiche di seguito.)

Ho impostato l'applicazione a livello locale e provato ad applicare la tecnica dal commento #4, aggiungendo

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

e cambiare il vostro find(:in primo luogo) e find(:ultima) il test .by_added_at.prima ed .by_added_at.ultimo, che restituisce più risultati stabili.

Un altro suggerimento -- il test è abbastanza grande adesso.Si potrebbe pensare di dividere in più prove, ciascuna delle quali prove di uno o due condizioni in più.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top