首页 > 解决方案 > 为什么类实例变量跨规范持续存在?

问题描述

我正在使用类实例变量来跟踪@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 以某种方式在规范中持续存在。我使用的是纯红宝石,没有 DB 或 rails 或任何东西。

标签: rubyrspec

解决方案


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


推荐阅读