Warum sollte ich rspec specs in meiner Rails App nur in einer Testumgebung ausführen, nicht in dev oder prod?

8

Mir wurde gesagt, dass ich meine rspec-Spezifikationen nicht in einem rails_env anders als test ausführen sollte.

Was sind die möglichen Probleme bei der Ausführung von Spezifikationen in der Produktion oder Entwicklung? Ich führe Spezifikationen in beiden aus. Normalerweise lasse ich die Spezifikationen in Dev laufen, außer wenn ich etwas teste, das die Asset-Pipeline verwendet. Ich wechsle in die Produktion und verbringe 15 Minuten damit, Assets vorkompilieren. Hat die Verwendung der Testumgebung gegenüber meinen aktuellen Methoden Vorteile?

Ich suchte nach einer Antwort, aber nichts erklärte, warum ich nicht Dev oder Prod verwenden sollte.

    
Spencer 17.09.2012, 14:23
quelle

3 Antworten

7

Das Ausführen von Testsuiten (z. B. rspec ) in einer test -Umgebung dient dazu, Ressourcen aus Sicherheitsgründen zu isolieren, insbesondere die Integrität Ihrer Datenbanken. Tests korrumpieren oder löschen Daten in Ihren Datenbanken oft.

Das Gleiche gilt für alle Ressourcen. Wenn Sie die test -Umgebung verwenden, können Sie Ressourcen abschneiden und vortäuschen, wodurch verhindert wird, dass Tests irgendetwas beschädigen.

Es gibt viele Gründe für die Verwendung separater Umgebungen, aber im Grunde ist es eine Trennung von Ressourcen, und im Kontext der test -Umgebung ermöglicht es die Validierung Ihrer Anwendung und gewährleistet gleichzeitig die Sicherheit der Produktionsressourcen und des laufenden Systems .

    
rudolph9 17.09.2012, 15:01
quelle
3

Seien wir klar, besonders für Nubes, die diesen Beitrag lesen: RAILS_ENV=production (lokal) ist nicht dasselbe wie Test in der production Umgebung ausgeführt wird. Ich weiß, dass Sie (OP) das wissen, aber die Gefahr, Tests in der Produktion durchzuführen, rechtfertigen diese Warnung.

Es gibt mehrere Gründe, nur in test env zu laufen, was generell mit der Handhabung der DB zusammenhängt:

  • Rspec erstellt eine benutzerdefinierte 'Version' der Daten in der DB und arbeitet damit fort, wobei einige Änderungen auf der Festplatte beibehalten werden.
  • Viele Tests löschen vorhandene Daten aus, gegen Ende der Test-Isolation und machen Dinge idempotent. Dies könnte die Daten, die Sie für Gebäude verwenden, im Test verfälschen.

andere Gründe sind entlang der Linien, die Sie bereits vermutet haben:

  1. Ihre Produktumgebung sollte keine Edelsteine ​​enthalten, die zum Testen verwendet werden. Warum?:
    • Testing Edelsteine ​​fügen mehr Code hinzu, der möglicherweise nicht lod & amp; renne, unnötig , in der Live-App
    • testbezogene Edelsteine ​​können Sicherheitslücken in Ihre Produktions-App einfügen.
  2. Bestimmte Assets werden möglicherweise nicht richtig getestet, nachdem sie "kompiliert" wurden.
  3. Assets und andere Deploy-Pipeline-Vorkompilierungen können im Service des Testprozesses anders gehandhabt / deaktiviert werden / etc.
  4. Bestimmte APIs und Dienste können im Test / Staging sandboxed oder stubbed sein, z. B. API-Aufrufe für Pay-per-Use-Dienste wie E-Mail oder Berichte.

Die Möglichkeiten sind zu benutzerdefiniert (zu Ihrer App), um eine Best-Practice zu empfehlen ... aber natürlich gibt es viele "Testmodus" -Einstellungen, die möglicherweise konfiguriert werden müssen, wenn rails_ENV=test

    
New Alexandria 17.09.2012 14:43
quelle
0

Sie sollten Ihre Prioritäten klarstellen. Warum führen Sie Spezifikationen aus?

  1. um sicher zu sein, dass Ihre Umgebung xyz Ihren Code überhaupt ausführt oder
  2. um sicher zu gehen, dass Ihr Code so funktioniert, wie er sollte

Ich würde sagen, die meisten Leute führen Spezifikationen für 2., und das sollte wirklich in der Testumgebung stattfinden, nur aus den Gründen in NewAlexandrias Antwort gegeben.

Wenn Sie nach der Bereitstellung nach 1 suchen möchten, scheint die Ausführung von Spezifikationen für mich ein bisschen weit hergeholt. Es sollte einfachere Wege geben.

Bei der Bereitstellung, und Sie sind nicht sicher über 2. ... das ist eine vorzeitige Bereitstellung, etwas, was Sie nicht tun sollten.

    
Atastor 17.09.2012 14:55
quelle