assigns()方法与Binding - Rails

Mik*_*378 3 ruby testing ruby-on-rails

我是Ruby on Rails世界的新手.

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

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

test "should get index" do
    get :index
    assert_response :success
    assert_not_nil assigns(:products)
end
Run Code Online (Sandbox Code Playgroud)

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

所以我想知道两个问题:

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

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

test "should get index" do
        get :index
        assert_response :success
        assert_not_nil @products
end
Run Code Online (Sandbox Code Playgroud)

它不会更短更清洁吗?

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

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

适用于测试用例的这种机制是什么?是assigns()方法重要的?

Jes*_*ott 7

但是,如果你带来了绑定,这可能会通过而不应该通过

test "should get index" do
    @fake_products = [1,2,3]
    get :index
    assert_response :success
    assert_not_nil @fake_products
end
Run Code Online (Sandbox Code Playgroud)

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