0

我正在尝试测试以下内容:

-> 作为用户,我希望能够创建帖子。每个帖子都有内容和类别(这是另一个模型),我应该可以从下拉列表中进行选择。

我有以下步骤:

When /^I create a post with valid data$/ do
  visit new_post_path
  # Here it would go the fill for content
  # Here it would go the select of category
end

我的问题是:我应该在哪里定义类别?在种子文件中还是..?

编辑:我的疑问是,例如在我的(表单)视图中,我有:

<div class="field">
    <%= f.label :category %><br />
    <%= f.select "category_id", options_from_collection_for_select(Category.all, "id", "name") %>
</div>

一旦从我的步骤定义中访问“新”路径,它将访问视图,但 Category.all 将不返回任何内容。我该如何解决?

谢谢

4

3 回答 3

2

您想要的任何背景设置,即您的测试所依赖的东西都应该在 Given 部分中指定。

Background:
  Given Categories exist

然后,您可以在步骤中指定您希望哪些项目可用于视图。例如FactoryGirl.create(:category)或其他

当使用 Background 指定 Given 时,它将在文件中的每个场景之前运行,非常适合设置依赖项。

于 2013-03-31T16:11:32.347 回答
0

您可以为测试数据库播种,也可以使用带有序列的Fabrication之类的 gem ,它可以让您生成唯一值,例如:

Fabricate.sequence(:category) { |i| "Category #{i}" }
# => "Category 0"
# => "Category 1"
# => "Category 2"
于 2013-03-31T15:50:01.077 回答
0

一般的答案是,使用实现测试数据构建器模式的库来创建您在给定步骤中需要的任何数据。正如其他答案中提到的, FabricationFactory Girl可能是最常用的测试数据构建器,但还有很多其他的。

于 2013-04-02T10:02:48.623 回答