この前の質問では、とユーザーのテストを作成する方法を尋ねました。ここで、と呼ばれる3番目のモデルをテストしたいと思います。Post
model
Comment
schema.rb:
create_table "posts", :force => true do |t|
t.string "title"
t.string "content"
t.integer "user_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.integer "comments_count", :default => 0, :null => false
t.datetime "published_at"
t.boolean "draft", :default => false
end
create_table "comments", :force => true do |t|
t.text "content"
t.integer "post_id"
t.integer "user_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
私は特にテストしcomments_count
たい:投稿にコメントを作成したい。それらの関連付けはすでに行われています(has_many
コメントを投稿)。comments_count
増加するかどうかを確認します。
誰かが私にテストがどのように見えるかの例を教えてもらえますか?
現在のコード:
comment.rb:
class Comment < ActiveRecord::Base
attr_accessible :content, :user_id
belongs_to :post, :counter_cache => true
belongs_to :user
end
仕様/工場:
FactoryGirl.define do
factory :user do
username "Michael Hartl"
email "michael@example.com"
password "foobar"
password_confirmation "foobar"
end
end
FactoryGirl.define do
factory :post do
title "Sample Title"
content "Sample Content"
published_at Time.now()
comments_count 0
draft false
association :user
end
end
spec / models / post_spec.rb:
require 'spec_helper'
describe Post do
let(:post) { FactoryGirl.create(:post) }
subject { post }
it { should respond_to(:title) }
it { should respond_to(:content) }
it { should respond_to(:user_id) }
it { should respond_to(:user) }
it { should respond_to(:published_at) }
it { should respond_to(:draft) }
it { should respond_to(:comments_count) }
its(:draft) { should == false }
it { should be_valid }
end
(ちなみに、私のアプリで何かをテストするのはこれが初めてです。テストする必要のないものをテストしていますか?必要なものが欠けていますか?)