Undefined method 'sollte' bei der Verwendung von Capybara mit Gurke
Ich versuche, mit beiden Wasserschweine und Gurken in meine Rails-Anwendung. Also, das ist, was ich getan habe:
- Installierten gems benötigt und hat Sie auf die
Gemfile
- Lief die
rails generate capybara:install --cucumber
- Erstellt ein feature und seine Schritte Definitionen für Gurken
Hier meine Funktion (ja, ich bin erstellen von blog-Anwendung):
Feature: Browse posts
So that I can browse through the posts
As a visitor
I want to see all and/or particular posts
Scenario: Viewing all the posts
Given Posts exist
When I navigate to the website home
Then I should see all the posts
Scenario: Viewing particular post
Given Post #1 exists
When I navigate to /posts/view/1
Then I should see the post with id=1
Und hier ist die Schritt-Definitionen:
Given /^Posts exist$/ do
assert (not Post.all.empty?), "No posts found at all"
end
Given /^Post #(\d+) exists$) do |id|
assert Post.find_by_id(id).valid?, "Post ##{ id } was not found at all"
end
When /^I navigate to (.+)$/ do |url|
if url =~ /^the website home$/ then
visit '/'
else
visit url
end
end
Then /^I should see all(.+)posts$/ do |delimiter|
posts = Post.all
posts.each do |post|
page.should have_content post.title
end
end
Then /^I should see the post with id([^\d]{1,})(\d+)$/ do |delimiter, id|
post = Post.find_by_id id
page.should have_content post.title
end
Und beim laufen rake cucumber
bekomme ich diese Meldung:
Then I should see all the posts # features/step_definitions/browsing_posts.rb:13
undefined method `should' for #<Capybara::Session> (NoMethodError)
./features/step_definitions/browsing_posts.rb:17:in `block (2 levels) in <top (required)>'
./features/step_definitions/browsing_posts.rb:16:in `each'
./features/step_definitions/browsing_posts.rb:16:in `/^I should see all(.+)posts$/'
features/browsing_posts.feature:9:in `Then I should see all the posts'
Was mache ich falsch? Und ja, gibt es irgendwelche Fehler in meiner Funktion?
- Das wird nicht Ihr problem lösen, aber verbessern Sie die Qualität Ihrer Geschichten:
Given nothing
ist nicht korrekt.Given Posts exist
ist eher, was Sie wollen. - Sie sind mit dem Standard-test::unit oder rspec? einige Ihrer syntax sind mehr im Stil von rspec
- eigentlich bin ich nicht sicher =) ich tests mit
rake cucumber
und ich sehe nicht ein rspec oder test::unit code von mir. ich nehme an, Gurken verwendet eigene Klassen - In diesem Fall sind Sie standardmäßig auf test-Einheit und sollten die Erwartung syntax, die mit ihm kommt
- was ist die Erwartungshaltung der syntax??? Ich kam nicht auf die Idee, Ihre Gedanken - Sie sprechen
assert
's???
InformationsquelleAutor shybovycha | 2012-08-29
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ersetzen
page.should have_content post.title
mitassert page.has_content?(post.title)
. Wenn das funktioniert, gilt, dass Sie-ähnlich wie die anderenhave_content
AussagenEdit: Solche Anweisungen mit
sollte
basieren auf rspec Erwartungen, und sollte nur verwendet werden, wenn Sie schon mit rspec oder anderen Test Frameworks, die responds_toshould
. Aus dem test::unit angle, dieser ist wahrscheinlich nur eine andere Art vonassert
.können Sie versuchen
statt
Seite.sollte have_content post.Titel
wenn es funktioniert, dann können Sie diese mit geltend zu machen.
nachdem vor dem gleichen Problem ich habe versucht
arbeitete, in Ordnung für mich