Ich habe Ihr Repo geklont und einen Blick darauf geworfen.
Scenario: when delete a post
Given I created a post with the title "Test", author "Testauthor" and body "Testbody"
When I browse "/posts" and click on "Destroy"
Then I should see the text "Comment was successfully destroyed."
posts_show_steps.rb:
Given(/^I created a post with a comment with title "([^"]*)", author "([^"]*)" and body "([^"]*)"$/) do |title, author, body|
post = Post.create! title: 'Test', author: 'Test', body: 'Test', published_at: DateTime.now
Comment.create! title: title, author: author, body: body, published_at: DateTime.now, post_id: post.id
print "#########################"
print Comment.all.pretty_print_inspect
## this shows the comment. It **does** exist...
end
When(/^I browse "([^"]*)" and click on "([^"]*)"$/) do |url, click_text|
print "#########################"
print Comment.all.pretty_print_inspect
## here it doesn't exist any longer...
visit url
end
Hier erstellen Sie einen Beitrag ohne Kommentar, das ist das erste Problem, das heißt, es ist kein Kommentar zu löschen! Dies kann durch Änderung dieser Given
zu fixierenden:
Given I created a post with a comment with title "CommTitle", author "CommAuthor" and body "CommBody"
(kann auch diesen Schritt Definition wieder verwenden, aber dies wäre besser, wenn dieser Test nur einen Eintrag ohne Kommentar erstellt, streng zu sprechen.)
Sie müssen auch auf den Link "Zerstören" in Ihrer Schrittdefinition klicken - fügen Sie in Ihrer Schrittdefinition click_on click_text
nach visit url
hinzu.
Sie müssen auch ändern "Kommentar wurde erfolgreich zerstört." zu "Post wurde erfolgreich zerstört." in Ihrer posts_show_feature.rb
Spezifikation, denn das testen Sie gerade.
Dieser Test wird nun bestanden.
Allerdings möchten Sie testen, dass Post
's Comment
s zerstört werden, wenn das Post
zerstört wird, ja?
Dies wird am besten bei Unit Test Ebene getan:
- rspec-Schienen gem Install:
Gemfile:
group :test, :development do
gem 'rspec-rails', '~> 3.5'
end
Lauf rails g rspec:install
- Erstellen Sie die folgenden Spezifikationen :
spec/models/comment_spec.rb:
require 'rails_helper'
RSpec.describe Comment, type: :model do
let(:post) { Post.create(title: 'title', author: 'author', body: 'body', published_at: DateTime.now) }
it 'is destroyed when its associated Post is destroyed' do
post.comments.create(title: 'title', author: 'author', body: 'body', published_at: DateTime.now)
expect { post.destroy }.to change{ Comment.count }.by(-1)
end
end
Es gibt ein paar Möglichkeiten, wie spec zu nähern, sondern dass eine Debatte für eine andere Zeit - dies ist eine Möglichkeit, es zu tun.
Um diesen Test zu bestehen machen (run rspec
diesen Test ausführen), fügen Sie zu Ihrem Post
Modell eine 'abhängige zerstören' Erklärung:
app/models/post.rb:
class Post < ApplicationRecord
has_many :comments, dependent: :destroy
validates :author, presence: true
validates :title, presence: true
validates :body, presence: true
validates :published_at, presence: true
end
That wird deinen Test bestehen lassen!
Als letzten Tipp, setzen Sie --format documentation
in Ihre .rspec
Datei, um rspec Druck bestanden Tests (eine persönliche Vorliebe von mir) zu machen.
Ich würde dann eine Rake-Task namens "Tests" erstellen, die sowohl Ihre RSpec-Spezifikationen als auch Ihre Cucumber-Spezifikationen ausführt, aber das ist nicht für diesen Thread.
Sind Sie sicher, dass der Kommentar korrekt erstellt wird? Wir müssen noch etwas mehr von deinem Code sehen, besonders im Hinblick auf die Erstellung von Kommentaren. –
Ja, ich weiß, bin. Hier ist der vollständige Code: https://github.com/cwansart/SQ-Hausarbeit/tree/cucumber/features Es ist die posts_show.feature und die posts_show_steps.rb. – Ctwx
Ich sehe 'expect (Comment.count) .to eq (1)' nirgendwo in Ihrem Repo ?? Welchen Fehler genau hast du? –