【问题标题】:testing calling a function in another class with rspec使用 rspec 测试调用另一个类中的函数
【发布时间】:2017-05-08 12:11:26
【问题描述】:

正在尝试测试此代码:

def new_function
  begin
    m = MyModule::MyClass.new(@var1,@var2,@var3)
    m.my_function
  rescue Exception => e
    raise e
end

这是测试:

describe "#new_function" do
  let(:var1) { 'var1'}
  let(:var2) { 'var2'}
  let(:var3) { 'var3'}
  let(:m) { MyModule::MyClass.new(var1,var2,var3) }

  it "should run my_function in another class MyClass" do
    expect(m).to receive(:my_function).and_return(0)
  end
end

我收到此错误:

预期:1 次带任何参数 收到:0 次带任何参数

有什么想法吗?

谢谢!

【问题讨论】:

  • 如果它解决了您的问题,请不要忘记接受答案

标签: ruby rspec


【解决方案1】:

预期:1 次带任何参数

收到:0 次,带任何参数

没错。你所做的只是设定期望,然后……什么都没有。你不需要打电话给new_function吗?

【讨论】:

  • 所以这不测试调用新函数? expect(m).to receive(:my_function).and_return(0)
  • 不,这只是设置期望,然后你就不要调用它。
【解决方案2】:

您设定了一个期望,但从未真正调用过该函数。你可以阅读更多关于存根的信息here

你的方法应该是这样的:

describe "#new_function" do
  let(:var1) { 'var1'}
  let(:var2) { 'var2'}
  let(:var3) { 'var3'}
  let(:m) { MyModule::MyClass.new(var1,var2,var3) }

  it "should run my_function in another class MyClass" do
    expect(m).to receive(:my_function).and_return(0)
    m.my_function
  end
end

您还想关闭该开始块:

  begin
    m = MyModule::MyClass.new(@var1,@var2,@var3)
    m.my_function
  rescue Exception => e
    raise e
  end

【讨论】:

    猜你喜欢
    • 2017-05-13
    • 2019-04-02
    • 2020-09-19
    • 2020-11-19
    • 1970-01-01
    • 2019-06-26
    • 2019-03-10
    • 1970-01-01
    • 2016-02-29
    相关资源
    最近更新 更多