Domanda

Ho un test dell'indice del controller che ottiene un ambito di Activecord. Il test è attualmente così (comprese alcune cose di debug in linea):

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

L'output è questo:

ActiveRecord::Relation
ActiveRecord::Relation

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

Questa non è sicuramente la prima volta che lo faccio nelle recenti versioni di Rails e RSPEC. In precedenza un collega avrebbe semplicemente avvolto gli oggetti in un to_a Per confrontarli, che trovo un po 'sporco e probabilmente non una buona soluzione.

Qualche idea? Sono curioso di sapere perché pensa che siano diversi e come questo stesso test sia passato nelle versioni precedenti di Rails e/o RSPEC.

È stato utile?

Soluzione

eql equivale a ==. L'autore di RSPEC Talks non usa solo !=, uso non dovrebbe invece

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))

Aggiornare: La relazione fornisce un modello di carico pigro, quindi non si dispone di alcuna query eseguita sul passaggio. Significa il fuoco la query sulla prima richiesta

Altri suggerimenti

Se vuoi confrontare gli array, dovresti scrivere

 assigns(:schools).all.should =~ School.populated.all
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top