我正在我的项目中将PhantomJS迁移到Chromeheadless。该项目在Angular1.x中编写,并有* .spec.js文件进行测试。我已完成以下更改以使用Chromeheadless。
karma.conf.js
// browsers: ['PhantomJS']
browsers: ['ChromeHeadless']
的package.json
"karma": "^1.7.1",
"karma-chrome-launcher": "^2.2.0"
测试失败,* .spec.js设置不同的userAgent。
window.navigator = {
userAgent: 'Firefox;'
}
window.navigator = {
userAgent: 'iPad;'
}
这对于PhantomJS工作正常,但为ChromeHeadless抛出"cannot assign to readonly property navigator of object '#<Window>'"
。
以下是我获取Window对象的方法。
myfile.spec.js
'use strict';
describe('My test description', function(){
var rootScope, compile, window, $document, browser, scope, timeout;
beforeEach(inject(function($rootScope, $compile, $window, _$document_, _browser_, $timeout;){
rootScope = $rootScope;
compile = $compile;
window = $window;
$document = _$document_;
browser = _browser_;
timeout = $timeout;
}));
...
...
...
});
在互联网上搜索,无法找到与我的问题相关的任何解决方案或主题。应该做些什么更改才能使窗口对象不是只读的,以便我可以分配其他userAgent?任何人都可以帮忙吗?
提前致谢。
答案 0 :(得分:1)
这会产生因为在严格模式下无法分配只读属性,并且出于某种原因,PhantomJS不会捕获它。我已经遇到过PhantomJS的其他一些问题,比如数组排序。
我不知道您是否需要它,但如果您删除'use strict',您可能会看到此错误不再出现。
更新: 尝试像这样设置用户代理:
Object.defineProperty(window.navigator, 'userAgent', {value: 'Firefox'});
或
Object.defineProperty(window.navigator, 'userAgent', {value: 'iPad'});