2016-12-08 10 views
0

私はRails TDDの新機能ですが、この機会に覚えておきたいと思います。しかし、私は顧客のフィードバックを受け取るMVCアプリを持っています。私がやったことは、最初に関数を開発し、後でTDDを始めたことです(私はそれが他の方法でなければならないことを知っています:P。しかし、私はTDDを初めて使ったので、 (ルート、コントローラ、モデルバリデーション)Rails RSpecとCapybaraのTDDは失敗します

しかし、私はテストに合格することができませんでした。テストコードに何が間違っているのか分かりませんか?そして、サンプルデータを一度作成してテストするTDDの初心者のために改善するために何ができるのですか?私はfactorygirlを使うことができるいくつかのブログ&の記事を読んでいますが、どうすれば "データ "と私は値または何かを格納するために余分なファイルが必要ですか?

私は間違っている場合も私を修正します。 CapybaraはUIテストに使用されますか?それはUIテストの多くを使用しています。 Seleniumのような他のツールは、Capybaraの代わりに使うことができますか?

feedback.rb

class Feedback < ActiveRecord::Base 
    validates_presence_of :name, :message => "Name is required before giving a feedback." 
    validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i, :message => "Invalid email address !", :allow_blank => true 
    validates :telephone_no, :numericality => {:allow_blank => true} 
end 

feedbacks_controller.rb

class FeedbacksController < ApplicationController 

    def create 
    @feedback = Feedback.create(feedback_params) 

    if @feedback.errors.any? 
     flash[:error] = @feedback.errors 
     render 'new' 
    else 
     redirect_to :back 
    end 

    end 

    def new 
    @feedback = Feedback.new 
    end 

    private 
    def feedback_params 
     params.require(:feedback).permit(:name, :email, :telephone_no, :comment, 
        :approved) 
    end 

end 

feedback_controller_spec.rb は "rails_helper"

describe 'Feedback#Create' do 

    context 'when param[:name] is not present' do 
    @feedback = Feedback.create 
    it 'should flash error' do 
     expect(flash[:error]).to match(/Name is required before giving a feedback .*/) 
    end 
    it 'should render back to new' do 
     is_expected.to render_template new_path 
    end 
    end 


    context 'when param[:name] is present' do 
    @feedback = Feedback.create(:name => "Hah") 
    @feedback.save 
    it 'should redirect to homepage' do 
     is_expected.to redirect_to new_feedback_path 
    end 
    end 


    context 'when param[:name] is present but with invalid param[:email]' do 
    it 'should flash error' do 
    end 
    end 

end 
が必要です

答えて

0

一つの質問で質問をたくさん厥、おそらく過度に広範であるためにフラグが付けられます - しかし、ここで基本的な概要だ

カピバラ:これらのページの内容に基づいてブラウザを制御し、アサーションを作るためのライブラリブラウザ。セレンドライバーを使用している場合、Capybaraはseleniunを使用しているので、Capybara用のSeleniumを交換してコードを書き直すことができます.Capybaraは簡単に使えます。 Capybaraは、コントローラスペックではなく、機能スペック(UIを使用したエンドツーエンドテスト)に使用されています。現在、Capybaraを使用しているテストはありません。 Matcherはビュー仕様でも使用できます。

テスト用データ:すべてのテストが他のすべてのテストと独立しているように、テストごとにデータを作成する必要があります。 RSpecはデフォルトで、テストをランダムな順序で実行し、それを強制します。レール、治具、工場でのテスト用のデータを作成するには、主に2つの方法があります。 FactoryGirlは、ファクトリの1つの実装であり、モデル内の属性のデフォルト値を設定し、テストに特別に必要な属性値のみでこれらの値をオーバーライドできます(他のデフォルト値を使用してオブジェクトを有効にします)。 Getting Started Guideには、その使用に関する多くの例があります。

関連する問題