0

RspecCapybaraを使ってテストを書きたいです。

モデルがあり、それに属性をPost追加したいと考えています。draftユーザーがそのフィールドをチェックすると、投稿は下書き ( draft = true) として保存されます。he 属性を持つ投稿のみが投稿draft = falseインデックス ページに表示されます。の投稿はdraft = true、その投稿を作成したユーザーのページにのみ表示されます。

人生でRspec + Capybaraのテストをしたことがありません。だから、誰かが私に始める方法や例を教えてくれるかどうか疑問に思っていました. 前もって感謝します!

スキーマ.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

(ちなみに、モデル、コントローラー、またはビューのページを投稿する必要がありますか?)

4

2 に答える 2

2

new2ruby の回答に追加するには、統合テストで capybara が提供する Feature/Scenario エイリアスを使用することもできます。

私はそれがうまく読めることを見つけます:

require 'spec_helper'

feature 'Visitor views posts' do
    scenario 'shows completed posts' do 
        post = FactoryGirl.create(post)
        visit posts_path

        page.should have_content(post.title)
    end

    scenario 'does not show drafts' do
        draft = FactoryGirl.create(draft)
        visit posts_path

        page.should_not have_content(draft.title)
    end
end

私は最近、 RSpec と Capybara の統合テストの使用に関する「入門」ブログ投稿を書きました。コードベースの設定について質問がある場合はお知らせください。

于 2012-10-24T13:42:50.190 に答える
1

私はモデルテストと統合テストの基本的なパターンに従ってきました。私はまた、rspecとcapybaraと一緒にFactoryGirlを使用しています。だから...最初にここに私の工場がどのように見えるかがあります:

FactoryGirl.define do
  factory :user do
    sequence(:email) { |n| "person#{n}@example.com" }
    password "foobar"
    password_confirmation "foobar"
  end

  factory :post do
    sequence(:title) { |n| "Test Title #{n}"}
    string "Test content."
    published_at Time.now()
    comments_count 0
    draft false
    association :user

    factory (:draft) do
      draft true
    end
  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 }
  its(:comments_count) { should == false }

  it { should be_valid }
end

次に、統合テスト(spec /requests/posts_spec.rb)を作成します。

require 'spec_helper'

describe "Posts pages" do

  subject { page }

  describe "index page when draft == false" do
    let(:post)  { FactoryGirl.create(:post) }

    before { visit posts_path }

    it { should have_content(post.title) }
  end

  describe "index page when draft == true" do
    let(:draft) { FactoryGirl.create(:draft) }

    before { visit posts_path }

    it { should_not have_content(draft.title) }
  end
end

http://ruby.railstutorial.org/のrailsチュートリアルを試してみてください。テストには、rspec、capybara、FactoryGirlを使用します。

于 2012-10-24T05:33:51.157 に答える