gpt4 book ai didi

ruby - RSpec 类变量测试

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

我正在使用 RSpec 测试 gem 中的类级实例变量(和 setter )。我需要测试以下内容:

  1. 如果从未使用过 setter ,则会提供正确的默认值。
  2. 变量可以通过 setter 成功更新。

显然这里存在运行顺序问题。如果我使用 setter 更改值,我就会忘记默认值是什么。我可以在 setter 测试之前将它保存到一个变量,然后在最后重置该值,但只有当所有 setter 测试都遵循相同的做法时,这才能保护我。

测试变量默认值的最佳方法是什么?

这是一个简单的例子:

class Foo
class << self
attr_accessor :items
end
@items = %w(foo bar baz) # Set the default
...
end

describe Foo do

it "should have a default" do
Foo.items.should eq(%w(foo bar baz))
end

it "should allow items to be added" do
Foo.items << "kittens"
Foo.items.include?("kittens").should eq(true)
end
end

最佳答案

class Foo
DEFAULT_ITEMS = %w(foo bar baz)

class << self
attr_accessor :items
end

@items = DEFAULT_ITEMS
end

describe Foo do
before(:each) { Foo.class_variable_set :@items, Foo::DEFAULT_ITEMS }

it "should have a default" do
Foo.items.should eq(Foo::DEFAULT_ITEMS)
end

it "should allow items to be added" do
Foo.items << "kittens"
Foo.items.include?("kittens").should eq(true)
end
end

或者更好的方法是重新加载类

describe 'items' do
before(:each) do
Object.send(:remove_const, 'Foo')
load 'foo.rb'
end
end

关于ruby - RSpec 类变量测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14063395/

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