2017-05-24 12 views
0
私はサービスからの関数呼び出しに「聞く」ために、ジャスミンのテストでは、spyOnを使用しています

ジャスミン・テストの設定コンポーネント変数

その関数は、観測を返します。

予期しないトークンU JSONエラーが発生しました。

誤差成分線から生成される:

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

のlocalStorage項目がJSON.stringifiedました。

私は未定義のJSON.parse =、

は、だから私は

component.config = mockConfig; 

..だから

// 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

localStorageがそこで利用できないので、ユニットテストでlocalStorage.getItemをモックする必要があります。 –

+0

あなたの返事ありがとうございますJulia、私はモックlocalStorage関数で私のコードを更新しましたが、同じメッセージで問題が解決しない場合は何か他にもありますか? – Roy

+0

コンポーネントコードを見ることなく言うのは難しいですが、オブザーバブルを扱っているので、テストに非同期を追加しようとします。それ( 'balala'、async(()=> {..}))のように。 –

答えて

2
すなわち私のテストの中に変数を設定しようとしたとき、このエラーは通常、スローされることを理解

この問題に遭遇した人のために、私はbeforeEachラッパーにこのコードを置くことでこれを実現しました。

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

基本的には、ウィンドウオブジェクトからのものではなく、私の仮のlocalStorage変数を使用します。

関連する問題