0

Ich migriere PhantomJS zu Chrome Headless in meinem Projekt. Das Projekt wurde in Angular1.x geschrieben und enthält * .spec.js-Dateien zum Testen. Ich habe die folgenden Änderungen vorgenommen, um Chromeheadless zu verwenden.PhantomJS zu Chromeheadless mit navigator.userAgent

karma.conf.js

// browsers: ['PhantomJS'] 
browsers: ['ChromeHeadless'] 

package.json

"karma": "^1.7.1", 
"karma-chrome-launcher": "^2.2.0" 

Prüfungen nicht, wo immer * .spec.js verschiedene Useragent Einstellung.

window.navigator = { 
    userAgent: 'Firefox;' 
} 

window.navigator = { 
    userAgent: 'iPad;' 
} 

Dies funktioniert für PhantomJS in Ordnung, aber wirft "cannot assign to readonly property navigator of object '#<Window>'" für ChromeHeadless.

Hier ist, wie ich mein Window-Objekt bekomme.

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

in Internet gesucht und keine Lösung oder ein Thema meiner Frage im Zusammenhang finden. Welche Änderungen sollten vorgenommen werden, damit das window-Objekt nicht schreibgeschützt ist, sodass ich andere userAgents zuweisen kann? Kann mir jemand helfen?

Vielen Dank im Voraus.

Antwort

0

Dies geschieht, weil es im strikten Modus nicht möglich ist, eine schreibgeschützte Eigenschaft zuzuweisen, und aus irgendeinem Grund fängt PhantomJS es nicht ab. Ich hatte bereits einige andere Probleme mit PhantomJS, wie Array-Sortierung.

Ich weiß nicht, ob Sie es wollen, aber wenn Sie 'verwenden strikt' entfernen, konnten Sie sehen, dass dieser Fehler nicht mehr auftreten wird.

UPDATE: Versuchen User-Agent wie folgt festgelegt:

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

oder

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