【问题标题】:I don't know what RSpec assigns does, and my tests are failing我不知道 RSpec 分配了什么,我的测试失败了
【发布时间】:2015-08-16 21:54:26
【问题描述】:

我正在阅读本书,使用 RSpec 进行日常 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 的文档在哪里?

【问题讨论】:

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-05
      • 2014-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多