0

我有一个失败的测试,据我了解,它应该使用 Faker gem 创建具有唯一值的对象。我真的被困在这里了。谢谢您的帮助!

来自 user_spec.rb 的测试失败:

describe "post associations" do
   before { @user.save }
   let!(:older_post) do
     older_post = FactoryGirl.create(:post, user: @user, created_at: 1.day.ago)
     older_post.add_tags!([Faker::Lorem.words(1), Faker::Lorem.words(1), Faker::Lorem.words(1)])
  end
  let!(:newer_post) do
     newer_post = FactoryGirl.create(:post, user: @user, created_at: 1.hour.ago)
     newer_post.add_tags!([Faker::Lorem.words(1), Faker::Lorem.words(1), Faker::Lorem.words(1)])
   end

   it "should have the right posts in the right order" do
     @user.posts.should == [newer_post, older_post]
   end 
end

后厂:

    factory :post do
    title       Faker::Lorem.sentence(Random.rand(1..5))
    content     Faker::Lorem.paragraphs(3)
    shared_url  Faker::Internet.url
    public_post true
    user
end

Rspec 结果:

1) User post associations should have the right posts in the right order
 Failure/Error: @user.posts.should == [newer_post, older_post]
   expected: [true, true]
        got: [#<Post id: 2, title: "Sapiente dignissimos qui et a.", content: "---\n- Quis necessitatibus eligendi sunt distinctio ...", shared_url: "http://blanda.biz/xander.cormier", public_post: true, created_at: "2013-06-28 15:31:00", updated_at: "2013-06-28 16:31:00", user_id: 1>, #<Post id: 1, title: "Sapiente dignissimos qui et a.", content: "---\n- Quis necessitatibus eligendi sunt distinctio ...", shared_url: "http://blanda.biz/xander.cormier", public_post: true, created_at: "2013-06-27 16:31:00", updated_at: "2013-06-28 16:31:00", user_id: 1>] (using ==)
   Diff:
   @@ -1,2 +1,3 @@
   -[true, true]
   +[#<Post id: 2, title: "Sapiente dignissimos qui et a.", content: "---\n- Quis necessitatibus eligendi sunt distinctio ...", shared_url: "http://blanda.biz/xander.cormier", public_post: true, created_at: "2013-06-28 15:31:00", updated_at: "2013-06-28 16:31:00", user_id: 1>,
   + #<Post id: 1, title: "Sapiente dignissimos qui et a.", content: "---\n- Quis necessitatibus eligendi sunt distinctio ...", shared_url: "http://blanda.biz/xander.cormier", public_post: true, created_at: "2013-06-27 16:31:00", updated_at: "2013-06-28 16:31:00", user_id: 1>]

 # ./spec/models/user_spec.rb:94:in `block (3 levels) in <top (required)>'
4

1 回答 1

1

在您的每个:let!块中,评估的最后一行是add_tags!方法,它似乎正在返回true而不是添加标签的帖子。因此,在您的规范中[newer_post, older_post]实际上等于[true, true]而不是您的实际帖子。

在每个:let!块的末尾,返回帖子:

let!(:older_post) do
  older_post = FactoryGirl.create(:post, user: @user, created_at: 1.day.ago)
  older_post.add_tags!([Faker::Lorem.words(1), Faker::Lorem.words(1), Faker::Lorem.words(1)])
  older_post
end

let!(:newer_post) do
  newer_post = FactoryGirl.create(:post, user: @user, created_at: 1.hour.ago)
  newer_post.add_tags!([Faker::Lorem.words(1), Faker::Lorem.words(1), Faker::Lorem.words(1)])
  newer_post
end

或者,您可以更改add_tags!方法以返回帖子而不是true/ false

于 2013-06-28T16:47:50.303 回答