使用黄瓜,未定义的方法测试动态属性

时间:2012-08-30 12:47:37

标签: ruby-on-rails-3 cucumber dynamic-attributes

我们有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

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

由于

1 个答案:

答案 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"

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