ruby - 为什么类实例变量跨规范持续存在?
问题描述
我正在使用类实例变量来跟踪@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 或任何东西。
解决方案
这就是类实例变量的作用。它们是类本身的状态,通常会在应用程序的整个生命周期中持续存在(或测试套件运行,在您的情况下)。
推荐阅读
- java - 混合字符串中的字符(更改二进制结果的顺序)
- android - 无法在 Git 中签出分支
- python - py4j.protocol.Py4JError:调用 None.None 时出错。痕迹:
- docker-compose - docker-nginx-反向代理转发
- typescript - Webpack - 未找到模块:错误:无法解析“PT”
- docker - 没有交互模式运行的容器将被忽略
- user-interface - 如何实现像下面这样改变 ui 的反射式颜色(主题)?
- c# - C#实现接口并扩展泛型类
- c# - 作为子进程启动的应用程序的终止结束调用应用程序
- amazon-web-services - 在 AWS S3 中,是否可以将元数据添加到通过 POST 上传到公共存储桶的对象?