2012-02-15 68 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