我不知道RSpec指定了什么,我的测试失败了

时间:2014-03-31 12:56:48

标签: ruby-on-rails rspec rspec-rails

我正在使用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的文档在哪里?

2 个答案:

答案 0 :(得分:1)

assigns实际上是Rails功能测试框架的一部分。这是一种访问您在控制器中分配的实例变量(@变量)的方法 - 如果您从未在控制器操作中设置assigns(:category),则@category将为nil。

有关assigns的更多信息,请查看Ruby on Rails测试指南this section。它的完整文档位于ActionController::TestCase documentation

答案 1 :(得分:0)

调用控制器后,您应该对分配有什么期望,即将控制器设置的值设置为实例变量。你可以看到它像使用@category。因此,使用FactoryGirl创建的类别不等于控制器创建的类别(在这种情况下,您的操作似乎在实例变量中返回nil值)