2012-12-19 29 views
0

創建主題helper方法在rpsec 2.12我預計這個輔助方法定義的工作:如何Rspec2

module X 
private 
    def build_them(type) 
    puts 'Catching the star' 
    end 
end 
context 'public/private instance methods' do 
    subject{ Class.new { extend(::X) } } 
    def subject.build(type) 
    puts "Throwing a star" 
    build_them(type) 
    end 
    it{ should respond_to :build} 
end 

實際的結果是一個失敗的產品規格:

expected #<Class:0x00000002ea5f90> to respond to :build 

我期待的例子通過

有關如何正確執行此操作的任何建議?

+1

預期輸出是什麼,實際輸出是多少? – ireddick

+0

@ireddick我添加了實際和預期的結果。 – Hedgehog

回答

1

調用subject而不傳遞一個塊實際上會返回proc形式的「主題」塊。這意味着,在你的代碼,當你這樣做:

def subject.build(type) 
    #... 
end 

你實際上是定義在PROC本身「建設」,而不是對象的PROC回報。

it {...}示例塊中,期望值是針對proc返回的對象執行的,所以測試失敗,如您所見。

爲了使測試通過,就需要定義實際的對象,「主題」塊將返回在「構建」的方法:

module X 
    private 
    def build_them(type) 
     puts 'Catching the star' 
    end 
end 

describe 'public/private instance methods' do 
    subject { 
    extender = Class.new { extend(::X) } 
    def extender.build 
     puts "Throwing a star" 
     build_them(type) 
    end 

    extender 
    } 

    it { should respond_to :build } 
end 

注意describe必須作爲最高級別上下文context必須嵌套

相關問題