2017-07-21 5 views
0

Ich schreibe einige Tests für meine Backend-Jobs und ich habe ein seltsames Problem mit rspec nicht meine Methoden zu finden.Rspec keine Klassenmethoden finden

schrieb ich eine einfache Klasse & Test das Problem zu veranschaulichen:

app/Interaktoren/tmp_test.rb:

class TmpTest 
    def call 
    a = 10 
    b = 5 
    b.substract_two 
    return a + b 
    end 

    def substract_two 
    c = self - 2 
    return c 
    end 
end 

spec/Interaktoren/tmp_test.rb:

require 'rails_helper' 

describe TmpTest do 
    context 'when doing the substraction' do 
    it 'return the correct number' do 
     expect(described_class.call).to eq(13) 
    end 
    end 
end 

Ausgabe:

TmpTest 
    when doing the substraction 
    return the correct number (FAILED - 1) 

Failures: 

    1) TmpTest when doing the substraction return the correct number 
    Failure/Error: expect(described_class.call).to eq(13) 

    NoMethodError: 
     undefined method `call' for TmpTest:Class 
    # ./spec/interactors/tmp_test.rb:6:in `block (3 levels) in <top (required)>' 

Finished in 0.00177 seconds (files took 1.93 seconds to load) 
1 example, 1 failure 

Failed examples: 

rspec ./spec/interactors/tmp_test.rb:5 # TmpTest when doing the substraction return the correct number 
+1

Bitte beenden Sie die Bearbeitung der ursprünglichen Frage und kehren Sie die Änderungen zurück. – mudasobwa

Antwort

1

Es ist keine Klassenmethode, es ist eine Instanzmethode. Ihr Test sollte so aussehen:

describe TmpTest do 
    subject(:instance) { described_class.new } 

    context 'when doing the subtraction' do 
    it 'returns the correct number' do 
     expect(instance.call).to eq(13) 
    end 
    end 
end 
+0

Vielen Dank für das Zeigen meiner Verwechslung zwischen Klassen- und Instanzmethoden, aber es gibt immer noch ein Problem mit der zweiten Methode, ich werde meinen ursprünglichen Beitrag bearbeiten. –

+0

Das ist alles cool, aber Sie haben einen Elefanten vermisst, der nach Fliegen jagt. – mudasobwa

+0

@mudasobwa: der 'btract_two'? Hab es nicht vermisst. Es war außerhalb des Bereichs der Frage :) –

0

Dies ist ein komplettes Durcheinander. Korrigierte Version mit Kommentaren:

class TmpTest 
    def call 
    a = 10 
    b = 5 
    # b.substract_two # why do you call method of this class on b?! 
    a + subtract_two(b) 
    end 

    def substract_two(from) 
    from - 2 
    end 
end 

auch: Verwenden Sie keine return in der letzten Zeile des Verfahrens.

+0

in der Tat mein Code ist sehr schlechte Qualität hier, ich schrieb es nur in Eile zu illustriere das Problem, Ich kann jetzt sehen, dass mein Problem die Klassenmethode (substract_two) auf dem falschen Element (b) aufgerufen hat Mit Ihrer Version funktioniert es. –

+0

Sie sollten Sergios Antwort akzeptieren, nicht meine, da er das Problem gelöst hat, nach dem Sie gefragt haben. – mudasobwa

+0

Mein "echtes" Problem (dieser Code entspricht hier dem Code meiner App) war eigentlich damit verbunden, eine Klassenmethode für ein falsches Element aufzurufen, also war Ihre Antwort in der Tat die gute für meinen Anwendungsfall. –

Verwandte Themen