我们有Style
模型dynamic attributes,可以通过使用属性键填充一个字段并使用值填充下一个字段来保存。
典型的params哈希看起来像这样:
{"utf8"=>"✓", "style"=>{"collection_id"=>"48", "program_id"=>"989", "number"=>"454632", "name"=>"t67f", "category_id"=>"19", "field_KEY"=>"VALUE"}, "commit"=>"save", "id"=>"4521"}
单击此按钮时,此工作正常,"field_KEY" => "VALUE"
对使用getter(field_KEY
)和setter(field_KEY=
)方法创建新的动态属性。
问题是:如果使用黄瓜模拟过程,则在设置属性之前,某些东西会调用哈希中所有键的getter,包括field_KEY
。
普通属性会为新记录返回nil
,但由于尚未创建field_KEY
的getter,因此会产生
`UndefinedMethodError: undefined method 'field_KEY'`.
现在我的问题是:你宁愿追踪field_KEY
吸气器的来电者还是乱用黄瓜,或者我应该尝试模拟假的方法,例如:
def check_method(method_name)
if method_name =~ /^field_/
nil
else
... # let the Error be raised
end
非常欢迎更好的想法或解决方案
由于
答案 0 :(得分:1)
对field_KEY
的来电来自pickle,因为我包含了
And the style's "field_KEY" should be "VALUE"
看起来像这样:
Then(/^#{capture_model}'s (\w+) (should(?: not)?) be #{capture_value}$/) do |name, attribute, expectation, expected|
actual_value = model(name).send(attribute)
expectation = expectation.gsub(' ', '_')
case expected
when 'nil', 'true', 'false'
actual_value.send(expectation, send("be_#{expected}"))
when /^[+-]?[0-9_]+(\.\d+)?$/
actual_value.send(expectation, eql(expected.to_f))
else
actual_value.to_s.send(expectation, eql(eval(expected)))
end
end
我仍然不知道为什么到目前为止还没有创建dynamic_attribute getter。
在我看来(也是,它解决了问题;)),黄瓜测试应该是黑盒测试,这就是为什么我选择改变步骤,现在我用
And the "key1" field should contain "KEY"
在页面重新加载后检查字段是否已填充正确的值。