我正在使用 RSpec 在 gem 中测试类级实例变量(和设置器)。我需要测试以下内容:
- 如果从未使用过 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)