2012-02-07 10 views
4

私はレールプロジェクトに取り組んでおり、レール上に新しいものがあり、rspecを使用してモデルのモデル関係とメソッドをテストしたいと思います。私は、この私のモデルとの関係は、このRspecを使用したモデル内の関係とメソッドのテスト

class Idea < ActiveRecord::Base 

    belongs_to :person 
    belongs_to :company 
    has_many :votes 
    validates_presence_of :title, :description 
    def published? 
    if self.status == "published" 
     return true 
    else 
     return false 
    end 
    end 

    def image_present 
    if self.image_url 
     return self.image_url 
    else 
     return "/images/image_not_found.jpg" 
    end 
    end 



    def voted 
    self.votes.present? 
    end 
end 

マイidea_spec.rbファイルのようなもので、どのように行うことができますが、shoulda-マッチャ(https://github.com/thoughtbot/shoulda-を使用する場合は

require 'spec_helper' 

describe Idea do 

    it "should have title" do 
    Idea.new(:title=>'hello',:description=>'some_desc').should be_valid 
    end 

    it "should have description" do 
    Idea.new(:title=>'hello',:description=>'some_desc').should be_valid 
    end 
end 
+0

*あなたが書いたコードの仕様書のみを書くことができます。フレームワークが提供する機能のテストを追加することは良い考えではありません。 – Swanand

+1

@ Swanandのコメントに一部同意しますが、これはもう少し微妙です。関連(フレームワークによって提供される)と検証(フレームワークによって提供される)との間には基本的な違いがあります。アソシエーションは構造であり、テストされるべき行動をサポートするためにのみ存在する必要があるため、直接テストする必要はありません。ただし、検証は動作であり、テストする必要があります。私の2セント。 –

+0

@DavidChelimsky - もちろん、私は同意します。私の唯一の懸案事項は、検証はここではDSLに似ており、レールによって提供され、レールが完成した時点ですでにテストされていたということでした。しかし、私はあなたの言葉を取るでしょう(私はすでに、RSpecの本を読んで実際にやった)。 – Swanand

答えて

5

ですmatcher)宝石あなたはこれらを書くことができますit{should belong_to(:person)}

しかし、正直言って私はこれらのタイプのテストから多くは得られません、ARはよくテストされています。

+0

私はshoulda-matcherを使用しています。とても簡単で信頼性の高いものです。彼らはデータベースなどの外来キーの存在を含むいくつかの事をテストします。 – iGEL

+0

真ですが、一意性テストでは、単体テスト時にデータベースにヒットする必要があります。私はこれらのテストを使うのが間違っていると言っているわけではありません。私はARに自信を持っているので、個人的にはそれほど多くは得られないと言っています。あなたがコードを確信していない場合は、それをテストする必要があります。それは良い方法です。 – Bangline

+0

これを実際にテストするのは間違いです。オープンソース製品に対する不信感だけを示しています。テストはすでに追加されています。なぜそれをもう一度テストしたいのですか? – Swanand

0

簡単な回答は、あなたはしていません。 has_manyまたはbelongs_toもテストしません。これらの仕様/テストの場所は、コードベースではなく、Railsのコードベースです。 Idea仕様は、Railsにはまったく何も与えません。

  1. belongs_to
  2. has_many

編集:上記DavidChelimskyさんのコメント@お読みください。ここ

は公式のテストです。

+0

はあなたが正しい質問を得ていないように見えます...彼はベースアソシエーションの方法のテストを求めていません。彼は自分のモデルの中にアソシエーションの存在テストを望んでおり、それは 'shoulda-matchers'を使って行うことができます –

+0

彼は"私のモデル関係とモデルをモデルでテストしたい "と言います。また、「ベースアソシエーション方式」と「自分のモデル内のアソシエーション」の違いは何ですか?彼らは同じではありませんか? – Swanand

+0

私は基本メソッド 'has_many、belongs_to'を意味し、関連付けは' belongs_to:person'を意味します。これはテストしたいメソッドです。 –

関連する問題