使特征规格不那么不稳定/脆弱

时间:2013-03-20 15:57:05

标签: ruby-on-rails capybara specifications

我正在编写功能规范,以确保我的应用的Add Task行为正常运行。我在没有编辑代码的情况下多次运行相同的规范,偶尔会有一个或两个规范失败。

我想知道是否有某些特定的东西让我的规格行为不规律(这是什么开发人员在讨论脆弱的规格时的意思?我想是这样......)。我添加了评论以澄清代码。任何建议表示赞赏。感谢。

task_feature_spec_helper

include ApplicationHelper

def click_task
  visit order_path(order.id)
  click_link("Add Task")
end

def add_valid_task
  click_task

  within("#add_task") do
    select 'foo1@example.com', from: 'Assignee'
    fill_in 'Due at', {:with => '15/03/25'}
    fill_in_html("task__textarea", {:with => task[:description]})
    click_button "Save"
    end
end

def add_empty_task
  click_task

  within("div#add_task") { click_button "Save" }
end

task_feature_spec     需要'spec_helper'

feature 'Create Task' do
  let(:order) {create(:order)}
  let(:task) {attributes_for(:task)} #using attributes for to prevent extra object 
  before(:each) {login_user}          #initliaztion (user squence only goes up if the user is 
                                       #saved.)

  scenario 'with valid description' , :js => :true do

    add_valid_task
    expect(page).to have_content('Task Created')   #'Task Created' is a momentary JS notification
    sleep 1                                         #this pause allows elements below to render

    within("div#tasks-table") do
      expect(page).to have_content('Due on 03/15/25')
      expect(page).to have_content('Assigned to foo1@example.com')
      expect(page).to have_content('Displayed on Ad Hoc')
    end
  end


  scenario 'with invalid (empty) description' , :js => :true do

    add_empty_task
    sleep 1

    expect(page).to have_content("can't be blank")
  end 
end

1 个答案:

答案 0 :(得分:0)

我的解决方案是删除规范expect(page).to have_content('Task Created')。由于这是一个JS toastr消息,我很难隔离它,最后我决定测试它对应用程序的整体功能并不那么重要。我还必须删除Due on,因为这会传递一半时间而另一半失败,即使它会a)输入机器人浏览器并且b)在输入后出现在机器人页面上。由于我能够进入它,我决定测试它的存在并不是必需的。

在调试时,我发现了这篇文章,Jonas Nicklas在清理我的规范方面很有帮助。

最后,我最终将sleep留在我的规格中,实际上将其增加到sleep(10),这增加了规格传递的可能性。