使用shoulda'应该'没有块

时间:2010-12-28 01:40:12

标签: ruby shoulda

我一直在愉快地使用这个:

context "test world" do
  setup do
   @world = ...
  end

  should "be spinning" do
   assert_equal "spinning", @world.movement
  end

  ... and so on
end

我需要提示了解这种变化:

class PostTest < Test::Unit::TestCase
   should belong_to(:user)
   should have_many(:tags).through(:taggings)

   should validate_uniqueness_of(:title)
   should validate_presence_of(:body).with_message(/wtf/)
   should validate_presence_of(:title)
   should validate_numericality_of(:user_id)
 end

我不清楚的是各种“应该属于(:用户)” 等等正在进行中。换句话说,它看起来很清楚 他们正在Post的一个实例上运行,但是是什么 确定? 'should xxx'行的主题是什么?

我知道这是一个新手问题,所以任何指针都会很棒!

1 个答案:

答案 0 :(得分:2)

shoulda定义了一些可以用来代替块的单行断言,以使某些类型的测试更简洁。这些是关于Active Record模型的特定断言。

你是对的,这些断言的主题是Post对象。这是从测试类的名称确定的。如果您想通过查看源代码来了解它:

https://github.com/thoughtbot/shoulda/blob/master/lib/shoulda/context.rb

construct_subject方法剥离Test后缀并实例化生成的类名。如果您对Active Record的特定单行断言感到好奇,请查看Active Record匹配器:

https://github.com/thoughtbot/shoulda/tree/master/lib/shoulda/active_record/matchers