Question

J'ai un test d'index du contrôleur qui obtient une portée ActiveRecord. Le test ressemble actuellement à ceci (y compris des trucs de débogage en ligne):

describe "GET index" do
  it "assigns all schools as @schools" do
    get :index
    puts assigns(:schools).class
    puts School.populated.class
    assigns(:schools).should == School.populated
  end
end

La sortie est la suivante:

ActiveRecord::Relation
ActiveRecord::Relation

expected: []
     got: [] (using ==)
Diff:

Ceci est certainement pas la première fois que je l'ai eu dans les versions récentes de Rails et Rspec. Auparavant, un collègue de travail serait tout simplement envelopper les articles dans un to_a de les comparer, que je trouve un sale peu et probablement pas une bonne solution.

Toutes les idées? Je suis curieux de savoir pourquoi il pense qu'ils sont différents, et comment ce même test passé dans les anciennes versions de Rails et / ou Rspec.

Était-ce utile?

La solution

eql est le même que == . Auteur de Rspec ne parle que ne pas utiliser ! = , utilisez should_not au lieu

actual.should == expected
#is interpreted as this:

actual.should.==(expected)

#This is not true for !=. Ruby interprets this: actual.should != expected
#as follows:

!(actual.should.==(expected))

Mise à jour : Relation fournit modèle de charge Lazy, de sorte que vous n'avez pas requête exécutée sur l'étape. Cela signifie que le feu de la requête sur la première demande

Autres conseils

Si vous voulez comparer les tableaux, vous devez écrire

 assigns(:schools).all.should =~ School.populated.all
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top