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