2012-03-30 5 views
2

Ich bin dabei, eine Rails-Anwendung in der Lage zu machen, auf verschiedenen anderen Maschinen als der VM zu laufen, die herum geteilt wird (CentOS 5.5).Unterschiedliche Array-Reihenfolge in den Spezifikationen auf verschiedenen Maschinen unter rspec

Ich habe die Tests habe auf meinem OSX 10.7.3 passieren, bis auf ein paar läuft, die Ausgabe ok Ergebnisse, aber mit einer anderen Reihenfolge, wie zum Beispiel:

'some test' FAILED 
expected: [831557419, 372199733, 89450236], 
    got: [372199733, 831557419, 89450236] (using ==) 

Ich bin irgendwie hier verloren, wie man das debuggt und löst. Irgendwelche Tipps oder Hinweise, die ich mir ansehen könnte?

Ich benutze unixodbc, freetds und activecord-sqlserver-adapter. Es ist eine Rails 2.3.8 Anwendung und RSpec 1.3.

PS: Bearbeiten, um darauf hinzuweisen, dass es im Projekt Fixtures gibt. Jemand hat vorgeschlagen, dass dies das Problem sein könnte (Fixtures werden hier in einer anderen Reihenfolge erstellt), aber ich habe keine Ahnung, wie ich es lösen kann.

PPS: Dies ist eine aktuelle Anwendung, die auf mehreren VMs ausgeführt wird, die von einer ursprünglichen VM geklont wurden.

Die Tests haben die meisten dieser erwarteten Werte fest codiert, aber die Tests übergeben diese VMs. Ich würde lieber die tatsächlichen Tests nicht ändern, wenn möglich.

Ich bin neu in der Codebasis, in einem Beratungsauftrag. Ich versuche, dies auf meinem Rechner zu implementieren, um zu beweisen, dass wir jede Maschine zur Entwicklung verwenden können (anstelle einer bereitgestellten VM möchte niemand Code schreiben). Die Reihenfolge ist wichtig.

+1

Schwer zu sagen, ohne etwas vom App/Spec-Code zu sehen. Sind Sie darauf angewiesen, dass Ergebnisse in einer bestimmten Reihenfolge zurückgegeben werden, die Sie nicht angeben? –

+0

Ja, zum Beispiel garantiert Postgres nicht wirklich die Reihenfolge der Ergebnisse. Wenn Sie also keinen Rückgabeauftrag angeben, wird es zufällig sein. –

+0

Sie haben nicht klargestellt, ob die Reihenfolge wichtig ist, dh die Bedeutung ändert. Wenn nicht, wenden Sie einfach eine '.sort' auf Ihren Vergleich an. – Ryanmt

Antwort

2

dieses Problem gelöst, indem die Ruby-Version zu ändern. Anscheinend ändert 1.8.7 @ patchlevel> 250 etwas, das dieses Verhalten verursacht.

+2

In der Tat, vor diesem Rubin nicht die Reihenfolge der Arrays respektieren. – TomDunning

3

Wenn der Ausgang in beliebiger Reihenfolge akzeptabel ist, verwenden diese Form:

output.should =~ [831557419, 372199733, 89450236] 
+0

Ich möchte die Spezifikationen nicht ändern. Diese arbeiten an anderen Maschinen. –

+0

Semantisch, wenn die Reihenfolge etwas ist, das Sie testen möchten, ist das Ändern von Tests wahrscheinlich ein klügerer Schritt. – BlueFish

Verwandte Themen