2011-05-08 65 views
2

當使用黃瓜時,我引用在步驟定義中使用的實例變量,例如在黃瓜的proc中修改實例變量圍繞鉤

Given /^I have an instance variable in my step$/ do 
    @person.should_not be_nil 
end 

在我的env.rb中使用Before掛鉤時有一個getter,例如,

class Person 
    def be_happy 
    puts "smiling" 
    end 
end 

person = Person.new 

Before do 
    @person = person 
end 

所有好爲止......

但是,如果我想使用一個圍繞鉤代替,我的理解是,它產生一個進程從中我可以打電話,這是在步驟例如塊

Around do |scenario, block| 
    @person = person 
    block.call 
end 

但是這個失敗,因爲@person是零。這是因爲@person在創建過程時被實例化,因此無法修改。有沒有辦法做到這一點?

+0

你實際上想用@person做什麼? – 2011-05-08 18:17:28

+0

凡@person通常是單個對象,它將用作塊的一部分,例如 @ people.each | person | @person = person block.call end – 2011-05-08 21:50:44

+0

或者換句話說,我想重複使用步驟中定義的同一個代碼塊來對一羣人中的每個人......而不是僅僅一個人。因此,對於每一步,它都被重複n次,其中n是人數組的大小...... – 2011-05-08 21:57:58

回答

0

兩種解決方案浮現在腦海

使用世界

嘗試使用World,也許在env.rb是這樣的:那麼

class Person 
    def be_happy 
    puts "smiling" 
    end 
end 

World do 
    Person.new 
end 

Around do |scenario, block| 
    block.call 
end 

和你一步DEF應該做的更像是:

Given /^I have an instance variable in my step$/ do 
    be_happy.should eql("smiling") 
end 

通過這種方法,您可以在每個場景中獲得一個新的分支,這可能是一件好事。

使用恆 倘若你不想爲每一個場景一個全新的人,只是用一個恆定的,也許像這樣:

class Person 
    def be_happy 
    "smiling" 
    end 
end 

MyPerson = Person.new 

Around do |scenario, block| 
    block.call 
end 

步驟DEF像這樣:

Given /^I have an instance variable in my step$/ do 
    MyPerson.be_happy.should eql("smiling") 
end