【问题标题】:Getting 'symbolize_keys' error in unit test在单元测试中出现“symbolize_keys”错误
【发布时间】:2015-03-22 18:49:03
【问题描述】:

我有以下测试:

test "vote for candidate" do
  get :vote, @candidate[:id]
  assert_equals(1, @candidate.votes.count)
end

这是我要测试的方法:

def vote
  @candidate = Candidate.find(params[:id])
  @candidate.votes.create
  redirect_to(candidates_path)
end

我不断收到此错误:

CandidatesControllerTest#test_vote_for_candidate:
NoMethodError: undefined method `symbolize_keys' for "358247726":String
test/controllers/candidates_controller_test.rb:35:in `block in <class:CandidatesControllerTest>'

任何朝着正确方向的推动都会有很大的帮助。

【问题讨论】:

  • @candidate 中有什么内容?为了使@candidate[:id] 正确,它必须是hash
  • @sebkomianos 看起来@candidate 是ActiveRecord 模型的一个实例。如果我记得,ActiveRecord 模型确实实现了#[]
  • @WayneConrad 你是对的,我的错!我最终赞成你的评论和西蒙娜的回答。 :)

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


【解决方案1】:

get 方法需要一个参数哈希作为第二个参数,您传递的是一个String。改变这一行

get :vote, @candidate[:id]

进入

get :vote, id: @candidate[:id]

或者,假设 @candidate 是一个 ActiveRecord 对象:

get :vote, id: @candidate.to_param

【讨论】:

    猜你喜欢
    • 2021-01-25
    • 1970-01-01
    • 2017-07-21
    • 2018-11-09
    • 1970-01-01
    • 2013-01-01
    • 2020-09-10
    • 2015-11-21
    • 1970-01-01
    相关资源
    最近更新 更多