2017-05-24 9 views
0

I spyOn bin mit, in einem Jasmin-Test zu „hören“ zu einem Funktionsaufruf von einem Dienst,Jasmin Test Einstellung Komponente Variable

dass Funktion gibt einen beobachtbaren.

Ich erhalte den Fehler unerwartet Token U JSON;

die Fehler aus der Komponentenleitung erzeugt wird:

this.config = JSON.parse(localStorage.getItem('configuration')); 

Der Artikel war local JSON.stringified;

Ich verstehe, dass dieser Fehler in der Regel ausgelöst wird, wenn JSON.parse = nicht definiert,

Also habe ich die Variable in meinem Test dh

component.config = mockConfig; 

zu setzen versucht Also ..

// Storage Mock 
    function storageMock() { 
    var storage = {}; 
     return { 
     setItem: function(key, value) { 
     storage[key] = value || ''; 
     }, 
     getItem: function(key) { 
     return key in storage ? storage[key] : null; 
     }, 
     removeItem: function(key) { 
     delete storage[key]; 
     }, 
     get length() { 
     return Object.keys(storage).length; 
     }, 
     key: function(i) { 
     var keys = Object.keys(storage); 
     return keys[i] || null; 
     } 
    }; 
    } 
    let mockConfig = JSON.stringify({ 
    base_url:"http://image_url/", 
    poster_sizes:['w9', 'w100'] 
    }) 
    //Set storage 
let m = storageMock() 
m.setItem('configuration', mockConfig) 

    it('Should set items array with values from MoviesService',() => { 
    component.config = JSON.parse(m.getItem('configuration')); 
     let spy = spyOn(moviesService, 'getPreview').and.callFake(()=>{ 
     return Observable.from([[{id1: 1, title: 'a'}, {id1: 2, title: 'b'}]]) 
    }) 
    component.ngAfterViewInit(); 
    expect(component.items.length).toBeGreaterThan(0); 
}); 
+0

Sie müssen localStorage.getItem in Komponententests verspotten, da localStorage dort nicht verfügbar ist. –

+0

Vielen Dank für Ihre Antwort Julia, ich habe meinen Code mit einer falschen localStorage Funktion aktualisiert, aber das Problem besteht immer noch, mit der gleichen Nachricht, gibt es etwas anderes, was ich tun muss? – Roy

+0

Es ist schwer zu sagen, ohne den Komponentencode zu sehen, aber ich würde versuchen, Ihrem Test Async hinzuzufügen, da Sie sich mit Observablen beschäftigen. wie es ('balala', async (() => {..})); –

Antwort

2

Für alle, die auf dieses Problem stoßen, habe ich diese Arbeit durch die Platzierung dieses Codes in der beforeEach wrapper

Object.defineProperty(window, 'localStorage', { value: m }); 

Im Grunde verwendet es meine mock localStorage-Variable anstelle der aus dem Window-Objekt.

Verwandte Themen