[英]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.