0

我正在将PhantomJS迁移到我的项目中的Chromeheadless。该项目在Angular1.x中编写,并且有* .spec.js文件供测试。我做了以下更改以使用Chromeheadless。PhantomJS to Chromeheadless with navigator.userAgent

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但抛出"cannot assign to readonly property navigator of object '#<Window>'"的ChromeHeadless。

这是我如何得到我的窗口对象。

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

搜索互联网,找不到与我的问题的任何解决方案或主题。为了让我可以分配其他userAgents,窗口对象不能只读,应该做什么改变?任何人都可以帮忙吗?

在此先感谢。

回答

0

由于在严格模式下无法分配只读属性,出于某种原因,PhantomJS无法捕捉它。 PhantomJS也有其他一些问题,比如数组排序。

我不知道你是否想要它,但如果你删除'use strict',你可以看到这个错误不会再发生。

UPDATE: 尝试设置用户代理是这样的:

Object.defineProperty(window.navigator, 'userAgent', {value: 'Firefox'}); 

Object.defineProperty(window.navigator, 'userAgent', {value: 'iPad'});