【发布时间】:2018-03-30 02:12:31
【问题描述】:
我需要找到改变userAgent 值的方法。我试过spyOnwindow.navigator.userAgent。但这无济于事。
JS:
@Injectable()
export class DetectBrowserService {
browserIE: boolean;
constructor() {
this.browserIE = this.detectExplorer();
}
public detectExplorer() {
const brows = window.navigator.userAgent;
const msie = brows.indexOf('MSIE ');
if (msie > 0) {
// IE 10 or older => return version number
return true;
}
}
}
规格:
it('should test window.navigator.userAgent', () => {
const wind = jasmine.createSpy('window.navigator.userAgent');
wind.and.returnValue('1111');
detectBrowserService = TestBed.get(DetectBrowserService);
console.log(window.navigator.userAgent);
});
我期待1111,但得到了关于我的浏览器的真实信息。
【问题讨论】:
-
我建议将原生 api 调用封装到紧凑的函数中(如 adequatelygood.com/Writing-Testable-JavaScript.html),并监视这些函数而不是原生 api。依赖紧密的功能使您的代码更便携(服务器端渲染、多浏览器问题等)和可测试性。我总是在用 jasmine 监视原生窗口 api 时遇到问题。
标签: angular unit-testing jasmine karma-jasmine spyon