gpt4 book ai didi

ruby-on-rails - rspec 中的实例变量如何工作?

转载 作者:数据小太阳 更新时间:2023-10-29 06:31:30 24 4
gpt4 key购买 nike

这是 M Hartl 的 Ruby on Rails 教程中的一些代码。谁能解释为什么需要实例变量 (@user) 以及为什么不使用局部变量。另外,既然实例变量应该是类实例中的变量,那么@user是从哪个类实例化的呢?

require 'spec_helper'

describe User do

before { @user = User.new(name: "Example User", email: "user@example.com") }

subject { @user }

it { should respond_to(:name) }
it { should respond_to(:email) }
end

最佳答案

在该实例中使用局部变量意味着它的范围将被限制在 before 内,因此会导致错误。 @user 是 User 类型,但它是 describe block 的实例变量。 Rspec 有一些魔力,可以在运行时从每个 describe block 中创建一个类。每个示例(it block )最终都是该类的子类。类继承让例子看到@user

2017-05-14 编辑

链接的博文不​​再可用。使用 Wayback Machine 链接更新 + 在此处内联相关部分。

请注意,这被视为反模式,详见 blog post .请改用 let

let有以下优点:

  • 在一个例子中多次使用会被内存,但不会跨示例。
  • 它是延迟加载的,因此您不会浪费时间为未引用它的示例初始化变量。
  • 如果您的变量名有拼写错误,将引发异常。

关于ruby-on-rails - rspec 中的实例变量如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12645198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com