繁体   English   中英

茉莉花测试设置组件变量

[英]Jasmine testing setting component variable

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

该函数返回一个Observable。

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

该错误是从组件行生成的:

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

localStorage项目为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 });

基本上,它使用我的模拟localStorage变量,而不是window对象的变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM