1

我不了解与 rspec 的测试关联(has_many / belongs_to)相当基本的东西。

模型中的关联:

user has_many :posts
post belongs_to :user 

我设置了一个没有属性的用户并测试一个帖子是否应该响应用户。测试有效,但用户无效(并且未创建)。

我知道 respond_to 仅通过关联测试帖子的存在,但如果没有有效用户,它怎么可能存在?有人可以解释我为什么吗?谢谢!

user_spec.rb

require 'spec_helper'

describe User do

  describe "post associations"

    before(:each) do
      @user = User.create(@attr) #no attribute is set
    end

    it "should have a post attribute" do
      @user.should respond_to(:posts)
    end

  end

end
4

1 回答 1

2

用户确实回复了帖子,它只是返回一个空数组。在 Rails 控制台中试试这个:

> @user = User.new
> @user.posts
=> []

更好的测试可能是:

@user.posts.should be_empty

老实说,通常不建议您测试 Rails 关系,因为您本质上是在测试自己的 Rails,它已经过很好的测试。

但是,应该提供一些在 rspec 中工作的不错的匹配器来检查关系是否正确设置:

it {should have_many(:posts)}

在 github 上查看:https ://github.com/thoughtbot/shoulda

于 2011-03-19T17:25:24.867 回答