2012-02-15 22 views
1

我是一个完整的红宝石新手,但我可以感觉到这个代码可以改进。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 

但这代码将无法正常工作。任何想法如何改变这些方法调用的范围,使他们调用特定的实例变量。

回答

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