在Rspec中使用double作为对象的实例变量

时间:2016-10-02 09:15:57

标签: ruby rspec mocking double stub

我是Ruby上的新手,这是我关于stackoverflow的第一个问题,所以请耐心等待我。

我正在努力通过双重传递Rpec测试。

我有一个类Plane,它的初始化方法@plane_number = plane_number有一个attr_reader:plane_number。 attr_reader:plane_number

Class Plane   
   def initialize
   @plane_number = plane_number   
   end
end

我在另一个机场类中使用此变量来引用一个特定的平面,其中的平面编号在一个字符串消息中。我的代码中的字符串示例是:

class Airport
  def confirms_landed(plane)
  "The plane #{plane.plane_number} has landed"
  end
end

我用Rspec创建了一个测试,使用double作为平面实例,使用let(:plane){double:plane}
但我不知道如何使用double作为变量plane_number。

describe Airport do
let(:plane) {double :plane}
   it "confirms a plane has landed" do
   subject.confirms_landed(plane)
   expect(subject.confirms_landed(plane)).to eq("The plane #{plane.plane_number} has landed")
   end
end

代码工作正常并返回带有平面编号的正确字符串,但测试失败,因为我没有为变量plane_number分配一个double(我收到此错误消息:Double:plane收到意外消息:plane_number (没有args))

我确信这是一个非常简单的修复方法,但我似乎无法找到正确的答案。

1 个答案:

答案 0 :(得分:1)

从我所看到的,你只是错过了双重

上的平面编号方法
class Airport
  def confirms_landed(plane)
    "The plane #{plane.plane_number} has landed"
  end
end

describe Airport do
  let(:plane) { double(:plane, plane_number: 56) }

  it "confirms a plane has landed" do
      expect(subject.confirms_landed(plane)).to eq("The plane 56 has landed")
  end
end