【问题标题】:expect to change many array elements期望改变许多数组元素
【发布时间】:2014-05-11 19:20:28
【问题描述】:

至于现在我的 rspec 测试中有这样的东西,它工作正常:

expect{
 ...
}.to change(@foo_array.first, :bar).from(3.14).to(69)

但如何期待不仅.first 的变化,而且@foo_array 的每个人都发生变化?

注意:重要的是不要多次执行... 命令

【问题讨论】:

  • 尝试使用change{@foo_array.first.bar}(带大括号)而不是change(@foo_array.first, :bar)
  • 这不是重点,我的测试工作正常,但仅适用于 .first 数组元素,我希望测试所有元素。我正在阅读有关 collectinjectmap 的信息,想知道如何使用其中一个,但我什至不确定这是否是一个好方法。

标签: ruby-on-rails rspec


【解决方案1】:

怎么样:

count = @foo_array.count
expect{
 ...
}.to change(@foo_array.map(&:bar)).from([3.14]*count).to([69]*count)

【讨论】:

  • 我收到了nil is not a symbol 错误,但不清楚是什么。我不太了解.map&,但我觉得这可能是个问题。我可以为我的确切情况提供更多详细信息。
  • 可能我得到了一些有用的建议:expect{ ... }.to change{@foo_array.map {|foo| foo.bar }}.from([3.14]*count).to([69]*count)。我需要玩一下以确保
  • 它有效(我的版本)。我接受了答案,因为这将我推向了最终解决方案,我想坚持编辑它,因为也许你用&:bar 构建它的方式应该可行,但我犯了一个错误。请查看并发表评论,因为我不确定 &:bar 应该如何工作。
  • x.map(&:bar) 相当于x.map { |f| f.bar } 看这里:stackoverflow.com/questions/1961030/… 相信你可能错过了:(写错了.map(&bar)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多