2016-07-10 9 views
0

Ich habe derzeit einen Test, der nicht die Fähigkeit hat, bestimmte Pfade zu besuchen. Dieser Test ist eine Anforderungsspezifikation, und dies ist meine erste, soweit ich die Anforderungsspezifikationen mitteilen kann, sind sie ähnlich wie der Funktionstest und können Benutzer capybara Dinge wie visit und fill_in tun. Aber im Moment kann ich diese Anfrage nicht bekommen, um einen Pfad zu besuchen. Gibt es etwas, was ich über Anfrage-Spezifikationen wissen sollte? Ich werde meinen Code posten und sehen, ob Sie etwas seltsam finden?undefined Methode `Besuch '- RSpec

SPEC:

require "spec_helper" 

describe "Mailchimp" do 
    describe "Manage list" do 
    it "adds new subscriber to list" do 
     VCR.use_cassette "mailchimp/subscriber" do 
     visit new_subscriber_path 
     expect { 
      fill_in "first_name", with: "John" 
      fill_in "last_name", with: "Mayer" 
      fill_in "phone_number", with: "61615551233" 
      fill_in "email", with: "[email protected]" 
      click_button "Sign Up" 
     }.to change(Subscriber, :count).by(1) 
     end 
    end 
    end 
end 

Lassen Sie mich wissen, wenn Sie etwas anderes zu sehen. Danke!

+0

, was passiert, wenn man 'spec_helper' auf 'rails_helper' ändern? – MageeWorld

+0

Nichts. Derselbe Fehler. Danke für das Hinzeigen, aber – Bitwise

+0

Ich bin kein r-spec-Experte, aber beginnen nicht alle RSpec commaands mit einem 'RSpec.omething" "do' block um rspec zu starten? Ich würde auch sehen, ob ich funktioniert, wenn Sie es unabhängig von VCR machen? – MageeWorld

Antwort

2

Anforderungsspezifikationen waren in früheren Versionen von RSpec identisch mit Feature-Spezifikationen, aber die Dinge haben sich seitdem geändert.

Anforderungsspezifikationen sind so konzipiert, dass Sie den gesamten Stack über eine HTTP-Anfrage erreichen und Details aus der response überprüfen können. Sie verwenden Methoden wie get, post, patch und delete, um mit Ihrer Anwendung zu interagieren.

Ein Beispiel Anfrage spec:

get "https://stackoverflow.com/users/#{user.id}" 
expect(response.body).to include user.full_name 

Feature-Spezifikationen werden von Capybara angetrieben und erlauben Sie den vollständigen Stapel über Elemente der Schnittstelle zu treffen. Wenn Sie eine bestimmte URL treffen möchten, verwenden Sie visit.

Ihre Frage enthält ein Beispiel für eine Feature-Spezifikation, sodass ich sie in dieser Antwort nicht unbedingt wiedergeben muss. Mein Ratschlag zu Ihrem Code wäre, ihn so zu ändern, dass er die Schnittstelle prüft und nicht, wie sie die Datenbank ändert.

(Also ich denke, ich Ihren Code schließlich Echo wird. :))

require "rails_helper" 

feature "Mailchimp" do 
    describe "Manage list" do 
    scenario "adds new subscriber to list" do 
     VCR.use_cassette "mailchimp/subscriber" do 
     visit new_subscriber_path 
     fill_in "first_name", with: "John" 
     fill_in "last_name", with: "Mayer" 
     fill_in "phone_number", with: "61615551233" 
     fill_in "email", with: "[email protected]" 
     click_button "Sign Up" 
     expect(page).to have_content "You have successfully subscribed to our service" 
     end 
    end 
    end 
end 
+0

Danke für Ihre Hilfe Chris! Ich habe nur eine Frage. Ich benutzte eine Tut-by-Rails-Besetzung, und er verwendet eindeutig die Capybara-Konventionen in seinem Test. War das auf der Seite des Tutorials falsch? Ich bin wohl ein wenig verwirrt. – Bitwise

+0

Ahh Ich sehe diese aktualisierte Antwort jetzt – Bitwise

+0

Railscasts sind immer noch sehr wertvoll, aber Sie müssen vorsichtig sein, weil sie langsam veraltet werden. Ich denke, ich weiß, auf welchen Railscast Sie sich beziehen, und ja, dieser Aspekt von RSpec hat sich geändert, seit der Screencast aufgezeichnet wurde. –