1

我刚刚开始使用 Cucumber 和 Webrat,并且正在向现有的 Rails 应用程序添加功能规范。应用程序中的一个页面上有多个表单,代表构建新角色对象的不同方式。这是一个简化的示例:

<form id="adopt_character_form">
    ....
    <input type="text" name="character[name]" id="character_name">
    ...
</form>

<form id="spawn_character_form">
    ....
    <input type="text" name="character[name]" id="character_name">
    ...
</form>

如您所见,页面上有(至少)两个具有相同名称和 id 的字段,尽管它们采用不同的形式,我无法在 Webrat rdoc 或源代码中找到指定特定一。

我知道我可以更改其中一个的名称或 id,但我必须偏离 Rails 命名约定才能这样做,我真的不想这样做。我也可以将表单放在不同的页面上,但是对工作流程的修改比我想做的要多。我也可以尝试将它们合并到一个更加模块化和动态的单一表单中,但是为了支持给定的测试框架而不得不对 UI 进行结构性更改似乎有点问题,并且可能并不总是可行的,而且我会需要javascript。

有没有办法在 Webrat 中指定这些字段之一,或者我应该放弃并在另一个项目上尝试 Cucumber?

4

2 回答 2

1

考虑到具有相同 ID 的多个元素是对 HTML 有效性的明确违反,我认为您已经偏离了 Rails 约定的路径。Rails 的最新版本通常会努力使事情符合标准。IIRC 以区分 ID 的方式调用表单助手非常简单。如果没有别的,您可以为每次调用提供一个明确的 ID。对于 Rails 约定,name字段是唯一重要的字段,因为这是 Rails 必须映射回模型上的字段名称的字段。

于 2009-10-26T21:20:21.467 回答
1

您可以使用 webratswithin方法

例如在黄瓜步骤文件中

#my_steps
Then /^I update character name with  "([^\"]*)"$/ do |updated_character|
  within '#adopt_character_form'
     fill_in "character[name]", :with => updated_character
  end
end

希望有帮助

于 2010-01-14T21:14:25.423 回答