2015-12-18 104 views
-1

我想在這裏做一些測試。我有一個DSL和一個能夠證明它的類。我想測試評估DSL方法的方法,但我不知道如何在rspec中將&塊作爲參數傳遞。RSpec測試DSL instance_eval方法

這是我的DSL

animal 'Cat' do 
    likes :eating, :sleeping 
    dislikes :dogs 
end 

這是我Earth.rb文件,評估方法:

def animal(name, &block) 
    animal = Animal.new(name) 
    animal.instance_eval(&block) 
    @animals << animals 
end 

而這正是我試圖運行我的規格文件:

describe '.animal' do 
    context 'with correct block' do 
     it "creates a set of animals" do 
     expect(earth.animal('Cat', "likes :sugar, :cinema dislikes :dogs")). 
      to be something 
     end 
    end 
    end 

什麼是通過該塊不工作的方式? 謝謝!

+0

爲什麼不按照您在問題頂部給出的示例進行調用? –

+0

它不起作用 – pipipo

回答

1
block = lambda do 
    likes :sugar, :cinema 
    dislikes :dogs 
end 
expect(earth.animal('Cat', &block)).to be something 
+0

我得到一個ArgumentError: 錯誤的參數數量(1爲0)。在我定義塊的行上,有什麼想法? – pipipo

+0

你可以顯示你喜歡和不喜歡的方法定義嗎? – archana

+0

'高清喜歡(* set_of_likes) \t \t \t @like = set_of_likes \t \t年底 \t \t高清不喜歡(* set_of_dislikes) \t \t \t @dislike = set_of_dislikes \t \t end' – pipipo