Ruby阻止将范围更改为特定变量

时间:2012-02-15 22:24:51

标签: ruby

我是红宝石的完全新手,但我觉得这个代码可以改进。

    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

但是这段代码不起作用。任何想法如何改变这些方法调用的范围,使它们调用特定的实例变量。

1 个答案:

答案 0 :(得分: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