2017-05-10 2 views
0

Ich bin Unit-Tests eine benutzerdefinierte Stück Sentry Middleware für eine Redux-Anwendung. Der Prüfungsrahmen der Wahl ist Jest. Ich habe jeden einzelnen Weg versucht, window.Raven zu verspotten und kann es nicht funktionieren.Wie fire window.Raven mit Jest

window.Raven = { 
    isSetup: jest.fn(() => false) 
} 
... 
expect(Raven.isSetup).toHaveBeenCalled() 

Was fehlt mir? Muss ich stattdessen jest.setMock('raven-js') verwenden?

+0

ich eine Redux Middleware für Raven halten: [Raven-for-redux] (https://github.com/captbaritone/raven-for-redux) es Vielleicht könnte helfen. Wenn es Ihren Anwendungsfall nicht anspricht, bin ich neugierig auf das Problem, das Sie lösen möchten. Vielleicht könntest du ein Problem auf der GitHub-Seite melden. –

Antwort

0

Sie haben das importierte Modul so zu verhöhnen:

import Raven from 'raven-js' 
jest.mock('raven-js',()=> ({ 
    isSetup: jest.fn(() => false) 
})) 

it('should call raven',()=> { 
    //run you code 
    expect(Raven.isSetup).toHaveBeenCalled() 
}) 
+0

Das funktioniert also im beforeEach Block und wenn ich mich austrage den Wert im beforeEach Block, hat er es erfolgreich verspottet aber dann, wenn ich den Test starte, der den Code Im Test aufruft importiert 'raven-js' und ruft isSetup auf echte Raven-Instanz ... Ist es vorbei, den Spott zu schreiben? Muss ich den Import verspotten? – hally9k

+0

Also importieren Sie es mit 'Import Raven von 'Raven-Js' in Ihrem Test? –

+0

Im Code-Im-Test importiert es 'Raven von 'raven-js'. Ich importiere diesen Code in meinen Test. – hally9k

0

Es landete mit diesem sein, api Änderung in Jest 20 vielleicht ...

jest.mock('raven-js',() => { 
    return { isSetup: jest.fn(() => false) } 
}) 
1

I raven-for-redux halten was , vielleicht nicht überraschend, eine Raven Middleware oder Redux. Es enthält eine Test-Suite, also musste ich ein ähnliches Problem lösen. Anstatt Raven zu verspotten, entschied ich mich, einfach einen benutzerdefinierten Transport unter Verwendung Raven.setTransport() anzugeben. Dadurch konnte ich in meinen Tests Netzwerkanrufe vermeiden, aber immer noch genau testen, was Raven versuchte zu tun.

Sie können den gesamten Test finden Sie hier: https://github.com/captbaritone/raven-for-redux/blob/master/index.test.js