2017-11-22 1 views
1

In meiner Unit-Test-Suite, habe ich folgendes Mock:Mocked Funktion ist `undefined` aber Unit-Test scheitert nicht

beforeEach(() => { 
     NativeModules.MyModule = { 
      myMethod: jest.fn() 
     }; 
    }) 

Und dieses Gerät zu testen, die es verwendet:

it('has some functionality',() => { 
    console.log(JSON.stringify(NativeModules.MyModule.myMethod)); 
    expect(NativeModules.MyModule.myMethod).toHaveBeenCalledTimes(1); 
}); 

Die console.log Funktion druckt undefined, aber der Test besteht.

Allerdings, wenn ich diese Zeile hinzufügen:

expect(jest.fn())[.not].toHaveBeenCalledTimes() 

jest.fn() value must be a mock function or spy. 
Received: undefined 

Wie also kann, wenn NativeModules.MyModule.myMethod das Gerät Testdurchlauf ist undefined: Mit dieser Nachricht

expect(undefined).toHaveBeenCalledTimes(1); 

Der Test wird fehlschlagen?

+0

Man kann nicht 'JSON.stringify' eine Funktion – Bergi

Antwort

2

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

Wenn undefiniert, eine Funktion oder ein Symbol wird während der Umwandlung angetroffen wird entweder weggelassen oder zensiert null (wenn er sich in einem Objekt gefunden wird) (wenn es in einem gefunden wird Array). JSON.stringify kann auch nur zurückgeben undefiniert bei der Übergabe in "reinen" Werten wie JSON.stringify (function() {}) oder JSON.stringify (undefined).

Wenn Sie die verspottete Funktion log direkt (console.log(NativeModules.MyModule.myMethod) statt Protokollierung console.log(JSON.stringify(NativeModules.MyModule.myMethod)) Sie die Ausgabe sehen Sie erwarten sollten.

Zum Beispiel:

console.log(() => {}) 
 
console.log(JSON.stringify(() => {}))

+0

Gibt es eine Alternative zu' JSON.stringify', die diese Objekte drucken würde? – octavian

+0

@octavian, welche Ausgabe möchten Sie sehen? Sie könnten möglicherweise [Function.prototype.toString()] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/toString) verwenden: 'console.log (fn. toString()) 'wenn das obige nicht die gewünschte Ausgabe lieferte (zB in REPL) –

Verwandte Themen