0

我刚开始使用 RSpec,我试图做一些非常微不足道的事情,但我找不到任何好的文档来说明这样做的好方法。我想测试一系列事件,比如两个用户之间的友谊。

我的规格是:

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,并希望它出现在 line 处# 2,但我猜数据库会在两者之间刷新。

这是测试这种事件流的错误方法吗?我应该做什么?任何指针将不胜感激。

4

2 回答 2

1

是的,数据库在事件流之间被刷新。

最好的测试方法是让每个测试都设置它需要的东西,并在完成后将其丢弃。这样,每个测试都是完全独立的,因此您不必为以后的测试依赖以前的测试。

您可以考虑只在工厂女孩中建立友谊,然后测试友谊是否存在,然后在集成测试中通过 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 文档:基本结构 (describe/it)

于 2012-05-28T05:33:15.287 回答