我正在尝试做以下事情:
@special_attributes = Model.new.methods.select # a special subset
@special_attributes.each do |attribute|
context "A model with #{attribute}" do
setup do
@model = Model.new
end
should "respond to it by name" do
assert_respond_to @model, attribute
end
end
end
但是,@special_attributes在运行单元测试时超出范围,在第2行留下了一个nil对象。我无法弄清楚在何处/如何定义它以使其在范围内。有什么想法吗?
答案 0 :(得分:0)
得到它(我认为)。 Shoulda正在Shoulda :: Context的上下文中执行块。在上面的例子中,@ special_attributes是我的测试类的实例变量,而不是Shoulda :: Context。要解决这个问题,只需在上下文块中使用局部变量,而不是使用实例变量。
所以,例如:
context "Model's" do
model = Model.new
special_attributes = model.methods.select # a special subset
special_attributes.each do |attribute|
context "attribute #{attribute}" do
setup do
@model = model
end
should "should have a special characteristic"
assert_respond_to @model, attribute
...
end
end
end
end