如何在Rails Capybara测试中的另一个场景之前运行场景

时间:2014-09-26 11:36:23

标签: rspec capybara

运行依赖于其他方案的方案的最佳方法是什么?

  scenario 'create a new category' do
    index_page.open
    index_page.click_new_category
    modify_page.fill_form_with(category_params)
    modify_page.submit
    expect(index_page.flash).to have_css('.alert-success')
    expect(index_page.entry(1)).to have_content(category_params[:name_de])
  end

这个'创建一个新类别'必须在另一个场景之前完成'编辑类别'可以开始了:

  scenario 'edit category' do
    index_page.open
    index_page.click_new_category
    modify_page.fill_form_with(category_params)
    modify_page.submit
    index_page.open
    index_page.click_edit_category
    modify_page.fill_form_with(category_params)
    modify_page.submit
    expect(index_page).to have_css('.alert-success')
  end

是否有快捷方式可以消除编辑类别中的前4行'场景?

1 个答案:

答案 0 :(得分:1)

您的测试不应该共享状态。这会使他们彼此依赖,你不想要你的编辑类别"测试失败,因为你的"创建新类别"功能被破坏了。

正确的方法是在"编辑类别"的设置中创建一个类别对象。测试

let(:category) { create(:category) } 

(这是FactoryGirl语法,是一种非常流行的数据配置工具。

scenario 'edit category' do
    visit edit_category_path(category)
    page.fill_form_with(category_params)
    page.submit
    expect(page).to have_css('.alert-success')
end

我不太确定你是如何使用这些填充函数的,但这基本上就是你应该做的! ; - )

干杯!