保持rspec测试干燥
我有以下rspec测试保持rspec测试干燥,rspec,Rspec,我有以下rspec测试 feature "#Create New User" do scenario "Sign In" do sign_in end scenario "direct to create new user page" do click_link 'Admin' click_link 'User Maintenance' click_link 'Create' end it "user name must not be
feature "#Create New User" do
scenario "Sign In" do
sign_in
end
scenario "direct to create new user page" do
click_link 'Admin'
click_link 'User Maintenance'
click_link 'Create'
end
it "user name must not be blank" do
fill_in "user_name", :with => ""
select2("Loanstreet", "UserType")
expect(page).to have_content "Name can't be blank"
it "user name length must longer than 5" do
fill_in "user_name", :with => "Euge"
select2("Loanstreet", "UserType")
expect(page).to have_content "Name length must be longer than 5"
end
end
我的问题是,在用户登录之后?第一个场景通过,但其余场景失败。有没有办法确保其他人也能通过?我知道它失败是因为第一个场景之后的“结束”。那么,如何在一个页面中进行多个测试,或者在一个页面中进行嵌套测试呢
感谢任何帮助请注意,
场景
,和是别名,因此它们做的是相同的事情
feature "#Create New User" do
# These two scenarios should not be like that, these are just
# preparations required by the other scenarios to pass
# scenario "Sign In" do
# sign_in
# end
# scenario "direct to create new user page" do
# click_link 'Admin'
# click_link 'User Maintenance'
# click_link 'Create'
# end
# they should be used in a before hook, which will be run before
# each scenario
before do
sign_in
click_link 'Admin'
click_link 'User Maintenance'
click_link 'Create'
end
# or you can make it a before :all so that it runs only once
# before all the scenarios
# before :all do
# sign_in
# click_link 'Admin'
# click_link 'User Maintenance'
# click_link 'Create'
# end
# it "user name must not be blank" do
scenario "changes user name with a blank string" do
fill_in "user_name", :with => ""
select2("Loanstreet", "UserType")
expect(page).to have_content "Name can't be blank"
end
# it "user name length must longer than 5" do
scenario "changes user name with a string shorter than 5" do
fill_in "user_name", :with => "Euge"
select2("Loanstreet", "UserType")
expect(page).to have_content "Name length must be longer than 5"
end
end
因此,每次我都必须在每个场景中执行上述操作。没有其他方法只执行一次并调用多个测试。还是rspec唯一允许的方式?感觉每次登录都像是很多功能重复。但是感谢@nafaa的回答,您可以在
spec\u helper
或rails\u helper
文件中执行此操作,Rspec.before do sign\u in end
但这不是此功能的目的。如果需要,可以定义一个进行登录的函数。需要的时候就打电话。这是建立和准备示例的正确方法,我想他们没有其他方法。