我一直在愉快地使用这个:
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'行的主题是什么?
我知道这是一个新手问题,所以任何指针都会很棒!
答案 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