Rails功能测试 - 在assert_difference('SomeModel.count')期间评估什么?

时间:2010-12-23 16:01:11

标签: ruby-on-rails testing

在Rails创建的功能测试中(使用脚手架生成模型时),有一个如下所示的测试:

test "should create product" do
    assert_difference('Product.count') do
      post :create, ...
    end 

    assert_redirected_to ...
end

我的问题是,Product.count实际评估了什么?

它是products表中的行数吗?

1 个答案:

答案 0 :(得分:1)

是产品表中的行数吗?

简短回答 - 是的

实际上它正在运行ruby代码Product.count,它恰好执行sql来获取products表中所有记录的计数。

我相信它在评估块之前运行代码,然后重新运行它并在块执行后比较值

http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-count

http://api.rubyonrails.org/classes/ActiveSupport/Testing/Assertions.html#method-i-assert_difference