0

我们有一个Style具有动态属性的模型,可以通过用属性键填充一个字段并用值填充下一个字段来保存它。

典型的 params 哈希如下所示:

{"utf8"=>"✓", "style"=>{"collection_id"=>"48", "program_id"=>"989", "number"=>"454632", "name"=>"t67f", "category_id"=>"19", "field_KEY"=>"VALUE"}, "commit"=>"save", "id"=>"4521"}

当点击它时,它会按预期工作,并且这对使用 getter( ) 和 setter( ) 方法"field_KEY" => "VALUE"创建一个新的动态属性。field_KEYfield_KEY=

问题是:如果该过程是用黄瓜模拟的,那么在设置属性之前,有些东西会为哈希中的所有键调用 getter,包括field_KEY.

普通属性将返回nil新记录,但由于field_KEY尚未创建 getter,这会导致

`UndefinedMethodError: undefined method 'field_KEY'`.

现在我的问题是:你宁愿追踪field_KEYgetter 的调用者并弄乱黄瓜,还是应该尝试模拟一个假方法,例如:

def check_method(method_name)
    if method_name =~ /^field_/
       nil
    else
       ... # let the Error be raised
end

更好的想法或解决方案非常受欢迎

谢谢

4

1 回答 1

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"

它会在页面重新加载后检查该字段是否已填充正确的值。

于 2012-08-30T14:44:26.920 回答