如何为rails关联编写规范?

时间:2011-09-16 18:05:37

标签: ruby-on-rails-3 rspec associations scopes

他们说完美的测试只包括测试框架和正在测试的类;其他一切都应该被嘲笑。那么,关联呢?

我并不是指简单的has_manybelongs_to关联,而是指关联扩展和范围。我真的很想为范围编写规范,但我无法想象如何去做。

1 个答案:

答案 0 :(得分:1)

我也被卷入其中。在Rspec,他们摆脱了“单元测试”的想法。实际上,Rails中的单元测试至少对我来说意味着测试模型上的属性值。但是你是对的,那些关联呢?

在Rspec中,您只需创建一个spec/models目录,然后测试您的模型。在模型规范(spec/models/user_spec.rb)的顶部,您进行了单元测试(测试属性),然后测试下面的每个关联:

require 'spec_helper'

describe User do
  context ":name" do
    it "should have a first name"
    it "should have a last name"
  end

  # all tests related to the gender attribute
  context ":gender" do
    it "should validate gender"
  end

  # all tests related to "belongs_to :location"
  context ":location" do
    it "should :belong_to a location"
    it "should validate the location"
  end

  # all tests related to "has_many :posts"
  context ":posts" do
    it "should be able to create a post"
    it "should be able to create several posts"
    it "should be able to list most recent posts"
  end
end

但现在您正在测试Post测试中的LocationUser模型?是的。但是Post模型除了与用户有关之外还会有一堆额外的东西。与Location相同。所以你有一个spec/models/location_spec.rb喜欢:

require 'spec_helper'

describe Location do
  context ":city" do
    it "should have a valid city"
  end

  context ":geo" do
    it "should validate geo coordinates"
  end
end

在我看来,这些都不应该被嘲笑。在某些时候,您必须实际测试关联是否正在保存并且是可查询的。那就在这里。您可以将其视为模型规范中的属性“单元测试”和关联的“集成测试”。