2016-11-23 20 views
11

Bir işlev çağrısı ile dalga geçmeye çalışıyorum ve bir kez içinde başka bir işlev çağrılmasını bekliyorum.Jest - bir işlev çağrısıyla alay etme

myFunctions.test.js

import { resetModal } from '../myFunctions.js'; 

describe('resetModal',() => { 
    it('calls the clearSomethingInModal function',() => { 
    const clearSomethingInModal = jest.fn(); 
    resetCreationModal(); 
    expect(clearSomethingInModal.mock.calls.length).toBe(1); 
    }) 
}) 

myFunctions.js

export resetModal() { 
    clearSomethingInModal() 
} 

Ancak Jest çıkış denir edilmediğini söylüyor

. Eğer bunu en iyi yapan kişi önerebilirse çok minnettar olurum.

cevap

16

Yaklaşma dozunuz, yalnızca test dosyanızın bağlamında clearSomethingInModal ile uğraştığınız için çalışmaz, bu nedenle 'da clearSomethingInModal hala orijinaldir. Esas nokta, myFunction.js'da doğrudan oluşturulan bir şeyle dalga geçemezsiniz. Eğer alay tek şey senin testinden bunları arama yaparken işlevi geçmesine import clearSomethingInModal from 'clearSomethingInModal'

  • geri aramaları gibi myFunction.js için içe

    1. modülleri vardır

    Bu eğer mantıklı myFunction.js'u kara kutu olarak düşünün; burada içe aktarılanlar veya işlev argümanları gibi içeri girenleri kontrol edebilir ve nelerin ortaya çıktığını test edebilirsiniz. Ama kutunun içinde olan şeyleri test edemezsin.

    burada listedeki 2 puan yansıtan

    import { resetModal } from '../myFunctions.js'; 
    import clearSomethingInModal from 'clearSomethingInModal'; 
    
    jest.mock('clearSomethingInModal',() => jest.fn()) 
    
    describe('resetModal',() => { 
        it('calls the clearSomethingInModal function',() => { 
        resetCreationModal(); 
        expect(clearSomethingInModal.mock.calls.length).toBe(1); 
        }) 
    }) 
    

    myFunctions.js

    import clearSomethingInModal from 'clearSomethingInModal'; 
    
    export resetModal() { 
        clearSomethingInModal() 
    } 
    

    myFunctions.test.js

    myFunctions.test.js iki örneğidir

    import { resetModal } from '../myFunctions.js'; 
    
    describe('resetModal',() => { 
        it('calls the clearSomethingInModal function',() => { 
        const clearSomethingInModal = jest.fn(); 
        resetCreationModal(clearSomethingInModal); 
        expect(clearSomethingInModal.mock.calls.length).toBe(1); 
        }) 
    }) 
    

    myFunctions.js

    export resetModal(clearSomethingInModal) { 
        clearSomethingInModal() 
    } 
    
  • +1

    Teşekkür Andreas, bu harika bir açıklama. Bu yüzden fonksiyonumun yapısını değiştirmeden istediğim gibi test edemem. Yani, (a) bu, işlevin tasarımında bir mesele anlamına gelir ve (b) mevcut haliyle, geçerli olabileceğiniz geçerli herhangi bir test var mıdır? 'ResetModal' işlevinin, aynı zamanda, kısaltmayı ihmal ettiğim bir dizi başka işlevi de çağırdığını unutmayın. –