【问题标题】:Rspec which actually tests method with instance variableRspec 实际使用实例变量测试方法
【发布时间】:2019-04-24 10:11:46
【问题描述】:

我有一个服务方法

class Service
  def maximum_match
    max = @hash.values.max
    Hash[@hash.select { |_k, v| v == max }]
  end
end

我的测试是这样的

context 'Finding tags count' do    
    it 'counts tags and returns maximum match' do      
      service = Service.new     
      expect(service.maximum_match).to eq some_result
    end
  end

如何传递任何值 @hash 来运行我的测试?

错误是NoMethodError:undefined method 'values' for nil:NilClass

【问题讨论】:

  • 好吧,你必须在某处传递/设置@hash。您将如何使用/调用 RSpec 之外的方法?
  • 顺便说一句,select 已经返回了一个哈希值。将结果包装在 Hash[...] 中是多余的。
  • 在服务@hash 内将有一些从另一个方法分配的值。如何在我的测试中通过/设置@hash
  • @Ninja:在您的测试中调用其他方法来设置您的@hash。您可以直接使用instance_variable_set 进行设置,但您可能会冒着将测试与现实脱钩的风险。
  • 是的,这会起作用,但我想通过传递随机的@hash 值来专门测试这种方法。这里的输入是不可预测的。

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


【解决方案1】:

忍者,你可以在expect 行的正上方使用service.instance_variable_set(@hash, your_value)

source

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-22
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多