对黄瓜和种子数据感到困惑

时间:2013-03-31 15:42:26

标签: ruby-on-rails rspec cucumber

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

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

我有以下步骤:

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将不返回任何内容。我该如何解决这个问题?

由于

3 个答案:

答案 0 :(得分:2)

您需要的任何背景设置,即您的测试所依赖的内容应在Given部分中指定。

Background:
  Given Categories exist

然后,您可以在步骤中指定要为视图提供哪些项目。例如FactoryGirl.create(:category)或其他

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

答案 1 :(得分:0)

您可以为测试数据库设定种子,或者您也可以使用带有序列的Fabrication这样的gem,它可以让您生成唯一的值,例如:

Fabricate.sequence(:category) { |i| "Category #{i}" }
# => "Category 0"
# => "Category 1"
# => "Category 2"

答案 2 :(得分:0)

一般的答案是,使用实现test data builder pattern的库在Given步骤中创建所需的任何数据。如其他答案中所述,FabricationFactory Girl可能是最常用的测试数据构建器,但还有很多其他的。