2015-04-27 3 views
1

У меня есть следующие RSpec тестдержа RSpec тесты DRY

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 

Моя проблема заключается в том, что после того, как признаки пользователя в? первый сценарий проходит, но тогда остальное терпит неудачу. Есть ли способ обеспечить, чтобы все остальное прошло? Я знаю, что это не удается из-за «конца» после первого сценария. так как мне делать несколько тестов на одной странице или вложенные тесты на одной странице?

Любая помощь приветствуется

ответ

1

Обратите внимание, что scenario, it и specify являются псевдонимами, поэтому они делают то же самое.

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 
+0

поэтому каждый раз я должен выполнять указанные действия в каждом сценарии. Нет другого способа сделать это только один раз и вызвать несколько тестов. Или это единственный способ, которым позволяет rspec? чувствую, что каждый раз, когда приходится регистрироваться, похоже на много повторений функций. Но спасибо за ответ @nafaa –

+0

Вы можете сделать это в файлах 'spec_helper' или' rails_helper', 'Rspec.before do sign_in end', но это не для этой функции. Если вы хотите, вы можете определить функцию, которая выполняет вход, и просто назовите ее, когда вам это нужно. Это правильный способ сделать примеры настройки и подготовки, их нет другого пути, я думаю. –

Смежные вопросы