assigns()方法与Binding - Rails

时间:2012-06-26 09:27:59

标签: ruby-on-rails ruby testing

我是Ruby on Rails世界的新手。

我注意到至少有一种方法可以从测试用例中访问控制器实例变量。

确实,假设这种测试方法:

test "should get index" do
    get :index
    assert_response :success
    assert_not_nil assigns(:products)
end

products是相关控制器中包含的实例变量。当然,测试用例参考了这个控制器。因此assigns()方法使用它来检查控制器实例变量的散列,从而允许从之前调用此控制器的任何其他文件访问任何精确对象。

所以我想知道两个问题:

为什么不为控制器创建“绑定”而不是使用assigns()方法?

我想象一个可以做到的版本:

test "should get index" do
        get :index
        assert_response :success
        assert_not_nil @products
end

它不会更短更清洁吗?

绑定是允许ERB文件访问控制器实例变量的机制,如下所示:

http://rrn.dk/rubys-erb-templating-system

这种适用于测试用例的机制是什么? assigns()方法是必不可少的吗?

1 个答案:

答案 0 :(得分:7)

如果你带来了绑定,那么这可能会通过而且不应该

test "should get index" do
    @fake_products = [1,2,3]
    get :index
    assert_response :success
    assert_not_nil @fake_products
end

您不一定希望测试中的所有实例变量都与控制器中的实例变量结合使用。 Assigns允许您将断言“范围”到控制器实例变量。