0

私はRSpecを使い始めたばかりで、非常に些細なことをしようとしていましたが、これを行うための良い方法に関する良いドキュメントを見つけることができませんでした。一連のイベント、たとえば2人のユーザー間の友情をテストしたいと思います。

私のスペックは:

describe User do

  describe "friendships" do
    describe ".friends?" do
      before do
        @user1 = FactoryGirl.build(:user)
        @user2 = FactoryGirl.build(:user)
      end

      it "should be false for non friends" do
        @user1.friends?(@user2).should be false
        @user2.friends?(@user1).should be false
      end

      it "should be false for requested friendship" do
        Friendship.create(:user_id => @user1.id, :friend_id => @user2.id)  # 1
        @user1.friends?(@user2).should be false
        @user2.friends?(@user1).should be false
      end

      it "should be true for accepted friendship" do
        Friendship.for_users(@user1, @user2).update_attribute(:approved, true) # 2
        @user1.friends?(@user2).should be true
        @user2.friends?(@user1).should be true
      end
    end

  end
end

とマークされた行で友情を作成していて# 1、それが行に存在することを期待して# 2いますが、データベースが2つの間にフラッシュされると推測しています。

これは、そのようなイベントの流れをテストする間違った方法ですか?私は何をすべきですか?任意のポインタをいただければ幸いです。

4

2 に答える 2

1

はい、データベースはイベントの流れの間にフラッシュされます。

テストへの最良のアプローチは、各テストで必要なものをセットアップし、完了したら破棄することです。そうすれば、各テストは完全に自己完結型であるため、後のテストのために以前のテストに依存する必要はありません。

factory girl で友情を築き、友情が存在することをテストしてから、統合テストで UI を介して人々を友達にし、同じことを確認することを検討してください。

于 2012-05-27T13:58:00.537 に答える
-1

を探していると思いますcontext。このようなもの:

context "when friends" do
  before { Friendship.create ... }

  it "should be false for requested friendship"

  it "should be true for accepted friendship"
end

申し訳ありませんが、rspec docs: basic structure (describe/it)を参照してください。

于 2012-05-28T05:33:15.287 に答える