在Rails / Rspec中模拟出一个哈希

时间:2016-08-29 18:49:56

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

我需要模拟自动提供给控制器的哈希值。我目前正在尝试为我的应用程序控制器编写Rspec测试。它需要从内部宝石中获取用户信息(因此我无法使用我在模拟会话散列中看到的任何解决方案)并使用它们填充我们的用户字段。

  # Create and store the user if they have never logged in before, set user if they have an existing record
  def logged_in_user
    @logged_in_user ||= User.find_by(id: current_user['id']) || create_user
  end

  def create_user
    User.create(name: current_user['name'], email: current_user['email'], id: current_user['id'])
  end

current_user是由我们的内部登录gem提供的哈希,我为了获得它而添加到代码中的唯一东西是" mount ...."在routes.rb中(在我的控制器中没有检索/调用任何其他内容,这是它唯一被使用的地方)。我知道我的代码有效,因为我可以登录到页面并看到我的用户信息已保存,但我需要编写涵盖所有方法的Rspec测试。我已经尝试定义一个名为" current_user"的哈希。我仍然收到一个错误,告诉我' []'类是一个未定义的方法:NilClass。我已经尝试使用allow(方法).to receive(current_user)但是当我这样做时,我们的代码覆盖工具告诉我,从未达到create user语句的内部

1 个答案:

答案 0 :(得分:2)

试试此代码

allow_any_instance_of(ApplicationController).
  to receive(:current_user).
  and_return({
    "name" => "your stubbed name",
    "email" => "stubbed email",
    "id" => "100"
  })