我正在编写功能规范,以确保我的应用的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
答案 0 :(得分:0)
我的解决方案是删除规范expect(page).to have_content('Task Created')
。由于这是一个JS toastr消息,我很难隔离它,最后我决定测试它对应用程序的整体功能并不那么重要。我还必须删除Due on
,因为这会传递一半时间而另一半失败,即使它会a)输入机器人浏览器并且b)在输入后出现在机器人页面上。由于我能够进入它,我决定测试它的存在并不是必需的。
在调试时,我发现了这篇文章,Jonas Nicklas在清理我的规范方面很有帮助。
最后,我最终将sleep
留在我的规格中,实际上将其增加到sleep(10)
,这增加了规格传递的可能性。