我正在使用RSpec进行Everyday Rails测试,并使用assigns
:
it "assigns the requested Category to @category" do
category = FactoryGirl.create(:category)
binding.pry
get :edit, id: category
expect(assigns(:category)).to eq category
end
然而,我的测试失败了,所以我使用pry挖掘(如上所示)
[1] pry(#<RSpec::Core::ExampleGroup::Nested_1::Nested_3::Nested_1>)> category
=> #<Category id: 83, name: "Example category", user_id: 1, created_at: "2014-03-31 12:25:45", updated_at: "2014-03-31 12:25:45", amount: nil, group_id: nil, amount_in: nil, amount_out: nil>
..好的,类别很好。大!但是,我不确定assigns
实际上做了什么,也找不到它的文档,因为我真的不知道它属于哪个(RSpec?FactoryGirl?)。无论如何,这是我得到的结果:
[2] pry(#<RSpec::Core::ExampleGroup::Nested_1::Nested_3::Nested_1>)> assigns(:category)
=> nil
..而且没关系。有人可以指出我在正确的方向,如果它是明显的,甚至解释一点assigns
实际做了什么(或意图做),将非常感激。另外,assigns
的文档在哪里?
答案 0 :(得分:1)
assigns
实际上是Rails功能测试框架的一部分。这是一种访问您在控制器中分配的实例变量(@
变量)的方法 - 如果您从未在控制器操作中设置assigns(:category)
,则@category
将为nil。
有关assigns
的更多信息,请查看Ruby on Rails测试指南this section。它的完整文档位于ActionController::TestCase documentation。
答案 1 :(得分:0)
调用控制器后,您应该对分配有什么期望,即将控制器设置的值设置为实例变量。你可以看到它像使用@category。因此,使用FactoryGirl创建的类别不等于控制器创建的类别(在这种情况下,您的操作似乎在实例变量中返回nil值)