2012-02-15 4 views
1

Я полный новичок в рубине, но я чувствую, что этот код можно улучшить.Рубиновые блоки для изменения области действия до определенной переменной

class LoginPage < BasePage 
     def initialize(session) 
     @session = session 
     end 

     def login(params) 
     @session.within '#login-form' do 
      @session.fill_in 'Login', with: params[:login] 
      @session.fill_in 'Password',with: params[:password] 
     end 
     @session.click_button 'Login' 
     end 
    end 

Я думал сделать что-то вроде:

@session do 
    within '#login-form' do 
    fill_in 'Login', with: params[:login] 
    fill_in 'Password', with params[:password] 
    end 
    click_buttton 'Login' 
end 

Но этот код не будет работать. Любая идея о том, как изменить область вызовов этих методов, делает их вызовы для конкретной переменной экземпляра.

ответ

2

Вы можете сделать это с помощью instance_eval.

@session.instance_eval do 
    within '#login-form' do 
    fill_in 'Login', with: params[:login] 
    fill_in 'Password', with params[:password] 
    end 
    click_buttton 'Login' 
end 

Однако я бы утверждать, что это делает ваш код запутанным, чтобы читать, так как можно было бы легко пропустить instance_eval при сканировании через код.

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