我正在使用 rspec 3.0.3 和 ruby 2.1.2,只是无法弄清楚出了什么问题。抱歉代码实现不好(我的意思是类变量),但这是显示问题所在的更简单方法。
我有2节课。首先调用 Test 类的 new_method 应调用应更改 @@c_var 类变量的 AnotherTest.call_method。
require "rspec"
class Test
def self.new_method
AnotherTest.call_method
end
end
class AnotherTest
@@c_var = "hola"
def self.call_method
@@c_var = "holla from another test"
end
def self.c_var
@@c_var
end
end
我正在为它写规范:
describe Test do
it "should call method from an other class" do
Test.new_method
expect(AnotherTest.c_var).to be_eql("holla from another test")
end
end
这个规格工作正常。但是后来我尝试使用“期望接到电话”出现问题
describe Test do
it "should call method from an other class" do
expect(AnotherTest).to receive(:call_method).and_return("holla from another test")
Test.new_method
expect(AnotherTest.c_var).to be_eql("holla from another test")
end
end
Failures:
1) Test should call method from an other class
Failure/Error: expect(AnotherTest.c_var).to be_eql("holla from another test")
expected `"hola".eql?("holla from another test")` to return true, got false
# ./test.rb:26:in `block (2 levels) in <top (required)>'
似乎 RSpec 正在像迁移一样进行此检查并在其后进行回滚。
这是一个奇怪的示例,我知道,但我注意到这个错误只有在一个类实例的方法从另一个实例调用方法并且该方法试图改变某些东西时。