2017-03-13 19 views
5

Sinon'un dizesinde işlevselliği geri yüklemek çok kolaydır.Atanmış işlevi geri yüklemek için Jest yöntemi hangisi

const stub = sinon.stub(fs,"writeFile",()=>{}) 
... 
fs.writeFile.restore() 

Jest ile aynı şeyi yapmak istiyorum. Eğer sahte işlevine clear all the calls istiyorsanız

const fsWriteFileHolder = fs.writeFile 
fs.writeFile = jest.fn() 
... 
fs.writeFile = fsWriteFileHolder 
+0

sen onun belgelenmiş henüz ama parçası 'spyOn' örnektir' mockRestore 'denediniz Dokümanlar içinde. –

cevap

5

, şunları kullanabilirsiniz: Ben olsun en yakın bu çirkin koddur

const myMock = jest.fn(); 
// ... 
myMock.mockClear(); 

taklidinin saklanan clear everything için, bunun yerine deneyin:

myMock.mockReset(); 
+0

Öneri için teşekkürler, ama işe yaramadı. İlk çirkin çözümüme yerleşmem gerekiyor gibi görünüyor. –

+0

@DejanToteff fs.writeFile işlevini bir jest.fn() olarak yeniden tanımladığınız görülüyor. mockClear ve mockReset, daha önce fs.writeFile olarak tanımlanan işlev değil, jest alay işlevi için kullanılır. Çözümünüz makul görünüyor. Yeniden tanımlamanın ardından, test bittikten sonra writeFile işlevi normale dönmez mi? Bu gönderi ilişkili görünmektedir, kontrol edin: https://github.com/facebook/jest/issues/936 – nbkhope

+0

Açıklama için teşekkür ederiz. Evet, çözümüm iyi davranıyor. Tek sorunum, Jest'in bu geri yükleme işlevselliğinin mümkün olması durumunda kodun daha iyi görünmesiydi. –

4

Son olarak, @ nbkhope'nin katkısı sayesinde uygulanabilir bir çözüm buldum.

Yani beklendiği gibi aşağıdaki kod çalışması, yani o kodu alay ve sonra özgün davranışı geri yükleyin:

const spy = jest.spyOn(
    fs, 
    'writeFile' 
).mockImplementation((filePath,data) => { 
    ... 
}) 
... 
spy.mockRestore() 
+0

İlginç! Bu (spyOn) yeni bir işlev mi? Henüz dokümanlarda bulamıyorum. – nbkhope

+0

Oh nevermind! Onu yeni buldum. Ve [v19.0.0 +] adresinden ulaşılabilir (https://facebook.github.io/jest/docs/jest-object.html#jestspyonobject-methodname). Güzel! – nbkhope

+0

@dejan Çözümü paylaştığınız için teşekkür ederiz. Ancak, 'console.log' alay ettiğim için çözümünüz benim için çalışmıyor. Herhangi bir fikir? Aşağıdaki kodumu ** numaralı telefondan görebilirsiniz: const spy = jest.spyOn (global.console, 'error') mockImplementation (err => errors.push (err)); spy.mockRestore(); ** –