茉莉花测试设置组件变量



我在茉莉花测试中使用 spyOn 来"侦听"来自服务的函数调用,

该函数返回一个可观察量。

我收到错误意外的令牌 U JSON;

错误是从组件行生成的:

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

本地存储项是 JSON.stringified;

我知道这个错误通常是在 JSON.parse = undefined,

所以我尝试在我的测试中设置变量,即

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);
});

对于遇到此问题的任何人,我通过将这段代码放在 beforeEach 包装器中来解决这个问题

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

基本上它使用我的模拟本地存储变量而不是来自窗口对象的变量。

最新更新