【问题标题】:RSpec: should_receive as thing being spec-edRSpec:should_receive 作为被指定的东西
【发布时间】:2012-07-10 13:58:29
【问题描述】:

我想使用should_receive 作为 RSpec 中规范的主题。换句话说,我不想测试should ==,而是想测试另一个类是否接收到方法调用。

我想写的是这样的:

describe '#methodOne' do

  subject { ClassTwo }

  it { should_receive(:methodTwo) }

  ClassOne.methodOne

end

这可能吗?

【问题讨论】:

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


    【解决方案1】:

    您可以通过多种方式扭曲 RSpec 以执行此类操作,但它并没有按照预期使用 RSpec。 should_receive 设置一个将调用方法的模拟期望。单行 it 语法没有意义。

    我建议您从基本的describe/it 结构开始,只有在出现重复时才重构为更高级的结构(主题,单行it)。

    【讨论】:

    • 如何重写我的代码,以便它以 RSpec 的预期方式测试should_receive
    【解决方案2】:

    所以我是这样做的:

    describe "#methodOne" do
    
      it "calls the appropriate method" do
    
        ClassTwo.should_receive(:methodTwo)
        ClassOne.methodOne
    
      end
    
    end
    

    这很好用

    【讨论】:

      【解决方案3】:

      我会以实例变量的形式使用主题:

      @subject.should_receive(:methodTwo)
      

      【讨论】:

      • 这对我不起作用。它跳过了规范,就像没有进行任何测试一样。
      • 是的,您应该模拟您的主题类并在其上使用should_receive,因为这是 RSpec::Mocks 库的一部分。如果您需要,Here 是一个很好的教程。
      猜你喜欢
      • 2013-09-01
      • 2014-05-06
      • 1970-01-01
      • 1970-01-01
      • 2014-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多