2017-05-08 50 views
0

試圖測試該代碼:測試調用一個函數在其他類rspec的

def new_function 
    begin 
    m = MyModule::MyClass.new(@var1,@var2,@var3) 
    m.my_function 
    rescue Exception => e 
    raise e 
end 

這是測試:

describe "#new_function" do 
    let(:var1) { 'var1'} 
    let(:var2) { 'var2'} 
    let(:var3) { 'var3'} 
    let(:m) { MyModule::MyClass.new(var1,var2,var3) } 

    it "should run my_function in another class MyClass" do 
    expect(m).to receive(:my_function).and_return(0) 
    end 
end 

我收到此錯誤:

預期:1時間與任何論據 收到:0次與任何論據

任何ID EAS?

謝謝!

+0

不要忘了接受回答如果它解決了你的問題 –

回答

1

expected: 1 time with any arguments

received: 0 times with any arguments

這是正確的。你所做的就是設定期望,然後......沒有任何東西。你不需要撥打new_function

+0

所以這不測試調用新功能? 期望(m).to接收(:my_function).and_return(0) –

+0

不,這隻能設置期望值,然後你就不要調用它。 –

1

你已經設定了一個期望值,但從未實際調用該函數。你可以閱讀更多的磕碰here

這是你的方法應該什麼樣子,而不是:

describe "#new_function" do 
    let(:var1) { 'var1'} 
    let(:var2) { 'var2'} 
    let(:var3) { 'var3'} 
    let(:m) { MyModule::MyClass.new(var1,var2,var3) } 

    it "should run my_function in another class MyClass" do 
    expect(m).to receive(:my_function).and_return(0) 
    m.my_function 
    end 
end 

你也想關閉開始塊:

begin 
    m = MyModule::MyClass.new(@var1,@var2,@var3) 
    m.my_function 
    rescue Exception => e 
    raise e 
    end 
相關問題