Hallo, ich habe kein Frontend in meiner App. Ich bin bereit, nur eine RESTful API zu veröffentlichen, die von verschiedenen Clients verwendet werden kann. Irgendwelche Hinweise, wie ich vorgehen sollte, um es mit Cucumber zu testen? Jede Aktion im Controller generiert nur einen XML-Feed. Irgendwelche Hinweise oder Vorschläge?
Antworten
Zu viele Anzeigen?Ich denke, Webrat ist mehr als das, was Sie brauchen. Für das Testen von XML-Feeds brauchen Sie keinen Browsersimulator wie Webrat, der Seiten lädt und das gesamte Markup (Links, Formulare usw.) analysiert, wenn Sie eigentlich gar keine HTML-Seiten haben.
Sie brauchen eher etwas wie Curl ( http://curl.haxx.se ) oder Curb (auf rubyforge, das sind Ruby-Bindings für Curl), oder Patron (auf rubyforge).
Diese Bibliotheken können einen Anfrage-Header nach Ihren Wünschen erstellen (z.B. Einstellung des Content-Typs, Auswahl zwischen GET PUT POST DELETE HEAD usw.) und die Antwort erhalten, und wahrscheinlich 302 Weiterleitungen folgen, wenn nötig.
Die zurückgegebene Antwort kann dann in ein XML-Objekt umgewandelt werden, und die für Ruby verfügbaren XML-Parser können zum Testen der Ausgabe verwendet werden. Sie können auch XMLMapping-Klassen (auf rubyforge) schreiben, um die XML-Ausgabe in Ruby-Objekte zu konvertieren und deren Attribute usw. zu testen. Dies ist IMHO viel sauberer.
Sobald Sie Ihre RESTful-Routen eingerichtet haben, sollten Sie Webrat verwenden können, um die verschiedenen Routen zu besuchen. Sie können dann testen, ob jede Route XML zurückgibt, das Ihren Erwartungen entspricht.
In diesem Blogbeitrag wird beschrieben, wie man die XML-Ausgabe in RSpec testet: Testen der XML-Ausgabe
Webrat ist ein Headless Browser, was einfach bedeutet, dass Sie einen Browser simulieren können, ohne einen echten Browser wie FireFox auf Ihrem Entwicklungsrechner öffnen zu müssen. Das bedeutet, dass Sie einfach etwas wie "visit 'users/'" in Ihre definierten Schritte eingeben können und einen Benutzer simulieren, der auf Ihre Anwendung zugreift.
Schließlich wird die Pragmatisches Buch über RSpec (noch in der Beta-Phase), ist eine großartige Ressource für die gemeinsame Nutzung von Cucumber, Webrat und RSpec, um Ihre Anwendungsentwicklung mit BDD voranzutreiben.
Ich habe versucht, das zu tun, und bin in einem großen Problem mit restful_authentication steckengeblieben (ich benutze AASM, eines der internen Modelle von restful_auth, wie es scheint) und kam zu dieser Lösung, um mich anzumelden:
Given /^I am logged in with a new account$/ do
login = "test"
@current_user = User.new(
:login => login,
:password => 'generic',
:password_confirmation => 'generic',
:email => "#{login}@example.com",
:state => "active"
)
@current_user.save
x = User.find_by_login(login)
x.state = "active"
x.save!
visit "/login"
fill_in("login", :with => login)
fill_in("password", :with => 'generic')
click_button
response.body.should =~ /Logged in successfully/m
end
Modularisieren Sie es für einen saubereren Testkorpus, um das von mir gefundene Konzept zu demonstrieren.