2017-07-28 10 views
0

Ich habe eine Frage über das Erstellen von Mocks von Funktionen in Jest. Ich habe zwei Elemente auf meiner Seite, die verschiedene Funktionen in meiner React-Komponente aufrufen. Beide Funktionen rufen dieselbe Funktion auf, die von den Requisiten onFieldChanged übergeben wird. Ich möchte eine Änderung an diesen beiden Elementen simulieren und bestätigen, dass props.onFieldChanged aufgerufen wird.Verspotten die gleiche Funktion in zwei verschiedenen Testblöcken in Jest

Wenn ich den ersten Test schreibe (der erste Test unten), passiert es mit Bravour. Wenn ich den zweiten Test schreibe, läuft der zweite Test, aber der erste Test schlägt fehl. Grundsätzlich kann ich nicht beide Tests zur gleichen Zeit bestehen. Muss ich den Mock irgendwie zurücksetzen? Weiß jemand, wie man das macht?

Was gibt?

describe('user selects checkbox',() => { 
    props.onFieldChanged = jest.fn(); 
    const wrapper = shallow(<DateOptions {...props} />); 
    it('calls the onFieldChanged function',() => { 
     const element = wrapper.find('#addOneToStudyDays'); 
     element.simulate('change'); 
     expect(props.onFieldChanged).toHaveBeenCalled(); 
    }); 
    }); 

    describe('user types in input',() => { 
    props.onFieldChanged = jest.fn(); 
    const wrapper = shallow(<DateOptions {...props} />); 
    it('calls the onFieldChanged function',() => { 
     const element = wrapper.find('#lowerTimeLimit'); 
     element.simulate('change'); 
     expect(props.onFieldChanged).toHaveBeenCalled(); 
    }); 
    }); 

Antwort

0

try jest.fn() als anderen Variable zu übergeben:

describe('user selects checkbox',() => { 
    it('calls the onFieldChanged function',() => { 
     const onFieldChanged = jest.fn(); 
     const wrapper = shallow(<DateOptions {...props, onFieldChanged} />); 
     const element = wrapper.find('#addOneToStudyDays'); 
     element.simulate('change'); 
     expect(props.onFieldChanged).toHaveBeenCalled(); 
    }); 
    }); 

    describe('user types in input',() => { 
    it('calls the onFieldChanged function',() => { 
     const onFieldChanged = jest.fn(); 
     const wrapper = shallow(<DateOptions {...props, onFieldChanged} />); 
     const element = wrapper.find('#lowerTimeLimit'); 
     element.simulate('change'); 
     expect(props.onFieldChanged).toHaveBeenCalled(); 
    }); 
    }); 
+0

, die nicht :( –

+0

funktionierte @MaxMillington Sie immer auf diesen beiden Instanzen Komponentenmethoden ausspionieren kann, die durch lowerTimeLimit genannt werden und addOneToStudyDays, und dann überprüfen, ob diese Methoden onFieldChanged aufrufen :) – dfee

+0

Ich versuche das jetzt, indem ich 'const spy = jest.spyOn (wrapper.instance(), 'handleInputFieldChanged');' und dann erwarte, dass der Spion gewesen ist namens. 'handleInputFieldChanged' wird definitiv aufgerufen (warf einige console.logs hinein), aber immer noch' Expected mock function' genannt. –

Verwandte Themen