为什么类实例变量在整个规范中仍然存在?

时间:2018-11-07 14:54:36

标签: ruby rspec

我正在使用类实例变量来跟踪@instances。当我分别运行每个规范时,它们会通过。但是当我一起运行所有组件时,会出现意外的行为。

it "returns 1" do
  mock = Mock.new
  expect(Mock.count).to eq(1)
end

it "returns 2" do
  mock = Mock.new
  mock = Mock.new
  expect(Mock.count).to eq(2)
end

当我分别运行时,所有规格均为绿色。但是,当我同时运行这两个规范时,第二个规范返回的计数为3。因此,我看到Mock在某种程度上仍然适用于所有规范。我使用的是纯红宝石,没有数据库或导轨或其他任何东西。

2 个答案:

答案 0 :(得分:4)

这就是类实例变量要做的。它们是类本身的状态,通常在应用程序的生命周期内(或在您的情况下运行测试套件)持续存在。

答案 1 :(得分:0)

我找到了解决方法!

before do
  @Mock = Class.new.include(IDable)
end

然后每次使用@Mock时,它将具有新的类实例变量!