Zwei Punkte: Dies ist wirklich ein Test, und Sie müssen einen Weg finden, um die Zeit zu reduzieren, die es braucht, um zu laufen.
In Bezug auf Teststruktur, ist Ihr zweiter Test nicht wirklich ein unabhängiger Test. Es hängt davon ab, dass der erste Test ausgeführt wurde. Die beiden sollten als ein einziger Test geschrieben werden. In RSpec werden Rauchtests wahrscheinlich am besten als feature specs geschrieben (nicht wegen der Capybara-Integration, sondern weil die feature
und scenario
-Syntax konzeptionell für Akzeptanztests geeignet ist). Es ist angemessen, mehr als eine Gruppe von Erwartungen in einem einzigen Szenario zu haben. So, wie ein First-Pass, würde ich schreiben:
feature "Smoke tests" do
context "Logged in" do
scenario "User starts a long-running process" do
# Do whatever starts the process
# Expect the initial (immediate) results of the process
sleep 20 * 60
# Expect the asynchronous results of the process
end
end
end
In Bezug auf Testlaufzeit, wäre es schrecklich sein zu haben, einen 20-minütige Einzeltest jedes Mal, wenn der Rauch testete eine Version Ihrer Software auszuführen. Alles, was Sie tun können, um diese 20 Minuten zu reduzieren, ist ein großer Vorteil für Ihr Unternehmen. Ich weiß nicht, warum es dauert 20 Minuten, den Prozess testen Sie testen, aber hier sind drei Überlegungen:
Wenn es tatsächlich 20 Minuten Arbeit (Berechnung) ist es, den Rauch zu tun, geben Testen Sie weniger Arbeit. Wenn die Zeit zum Abschließen des Prozesses beispielsweise von der Größe der Eingabedaten abhängt, geben Sie ihr einen Mindestdatensatz für die Bearbeitung. Wenn ein Teil dieser 20 Minuten nur eine willkürliche Verzögerung ist, bieten Sie einem privilegierten Benutzer die Möglichkeit, die Verzögerung zu steuern und diesen Mechanismus in Ihrem Rauchtest zu verwenden, um die Verzögerung auf einen so kleinen Wert wie möglich zu setzen, solange sie noch aktiv ist gültig als Rauchprobe. Fügen Sie diesen Mechanismus dem Produktionscode hinzu (anstatt etwas Testspezifisches wie einen Stub auszuführen), damit der Rauchtest noch den Produktionscode testet.
Wenn ein Teil dieser 20 Minuten einfach lange genug wartet, um sicher zu sein, dass der Prozess abgeschlossen ist, minimieren Sie dies durch Abfragen. Der von uzzer vorgeschlagene rspec-wait-Edelstein ist ein gutes Beispiel für diese Taktik. Sie könnten Ihre eigenen Abfragen schreiben, wenn der Wartealgorithmus von rspec-wait (er prüft nur alle wait_delay
bis er eine wait_timeout
erreicht) nicht gut für Sie funktioniert.