【问题标题】:What are the possible ways to write spec for a method? [closed]为方法编写规范的可能方法是什么? [关闭]
【发布时间】:2014-08-05 04:39:47
【问题描述】:

我的模型中有一个名为 average_n 的方法。

  def average_n=(average_n)
     @average_n = average_n
  end

我写的rspec如下

 its 'should be 8' do
   model.average_n=8.should==8
 end

还有其他可能的方法来为这个方法编写 rspec 吗?如果是,请发布作为答案。

【问题讨论】:

  • 还有许多其他方法可以为此方法编写规范吗?你想达到什么目的?你希望有什么不同,为什么?您认为如何编写规范最重要的是什么?
  • 以上被客户拒绝。所以我想用另一种方式来写。
  • 再次,为什么被拒绝了?您对此有什么想解决的问题? “给我另一种方式”不是一个有用的问题,因为没有办法评估答案。
  • “正确”是什么意思?如果解析器接受它是正确的吗?如果它按照您的预期通过和失败,是否正确?如果它使您的客户满意,是否正确?我们无法在这里判断什么才是好的答案,所以您将得到的只是对您真正要问的问题的假设以及对测试应该是什么样子的看法。
  • 您现有的规范实际上并没有进行太多测试 - 它被解析为 average_n = (8.should == 8)

标签: ruby-on-rails ruby rspec


【解决方案1】:

你已经有了 setter 方法 (average_n=),所以你还需要一个 getter 方法:

class MyModel < ActiveRecord::Base
  def average_n
    @average_n
  end

  def average_n=(average_n)
    @average_n = average_n
  end
end

这可以使用attr_accessor进行简化:

class MyModel < ActiveRecord::Base
  attr_accessor :average_n
end

如果你真的需要为它写一个规范:

describe '#average_n=' do
  let(:my_model) { MyModel.new }

  it 'sets average_n' do
    my_model.average_n = 8
    expect(my_model.average_n).to eq 8
  end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    • 2022-01-05
    • 2017-07-30
    相关资源
    最近更新 更多