我正在尝试测试以下内容:
- >作为用户,我希望能够创建帖子。每个帖子都有内容,还有一个类别(这是另一个模型),我应该可以从下拉列表中选择。
我有以下步骤:
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将不返回任何内容。我该如何解决这个问题?
由于
答案 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步骤中创建所需的任何数据。如其他答案中所述,Fabrication和Factory Girl可能是最常用的测试数据构建器,但还有很多其他的。