Leider ist VCR mit Capybara-webkit sehr inkompatibel. Tatsache ist, dass Capybara Webkit Webkit verwendet, das in c ist. Webmock und Fakeweb, die die Basis für VCR sind, können nur für Ruby Web-Anfragen verwendet werden. Es wäre wahrscheinlich eine monumentale Aufgabe, die beiden zusammenzuarbeiten.
Ich habe dieses Problem auf zwei Arten gelöst:
Die erste (hacky, aber gültig) ist eine neue JavaScript-Datei der Anwendung hinzuzufügen, die nur in der Testumgebung enthalten ist. Diese Datei stuffed die JS-Klassen, die externe Webanfragen stellen. Abgesehen von der reinen Hackatude dieses Ansatzes erfordert es, dass jedes Mal, wenn eine neue Anfrage hinzugefügt oder geändert wird, auch die Stubs geändert werden müssen.
Der zweite Ansatz besteht darin, alle externen Anforderungen über meinen eigenen Server zu leiten und alle externen Anforderungen über meinen Server zu verwalten. Dies hat den großen Nachteil, dass Sie eine Aktion für alles haben müssen, was Sie konsumieren möchten (Sie könnten es mit etwas Arbeit generisch machen). Es leidet auch unter der Tatsache, dass es doppelt so viel Zeit für die Anforderung zu vervollständigen. Da die Anfragen jetzt von Ruby gestellt werden, können Sie VCR in all seiner Pracht verwenden.
In meinen Situationen, Ansatz Nr. 2 ist viel mehr zu meinem Vorteil, dank der Tatsache, dass ich Ruby, um die Daten zu manipulieren, so dass ich mein Javascript Quell-Agnostiker halten kann. Ich habe jedoch den Ansatz Nr. 1 für eine ganze Weile erfolgreich verwendet.
Sie können ziemlich leicht einen Universal Proxy-Server ausgeführt werden. Ich konnte in Ruby nicht viele finden. Ich würde vorschlagen [Mousehole] (https://github.com/evaryont/mousehole), wenn Sie im Ruby-Ökosystem bleiben möchten. –
Richtig, du kannst. Wir haben das wegen der Betriebssystemabhängigkeiten und des Konfigurations-Albtraums, die wir mit diesem Ansatz gesehen haben, rausgeworfen. –
Welche Schwierigkeiten gab es bei der Proxy-Server-basierten Analyse? Sie müssen nur die Proxy-Einstellungen auf der Box, auf der capybara-webkit läuft, ändern? –