Angular.js: 1.5.0-rc.1 ne se charge pas dans l'environnement PhantomJS 1.x + Karma

Créé le 18 janv. 2016  ·  9Commentaires  ·  Source: angular/angular.js

J'ai une application que je viens de mettre à jour vers la 1.5.0-rc.1, et tous nos tests ont commencé à échouer. Il semble que les dernières versions de Karma et PhantomJS soient incompatibles avec rc1, bien que je ne sache pas ce qui a changé.

Testé avec [email protected] et [email protected] , voir l'essentiel de package.json pour plus de détails.

Pour reproduire, cloner et voir les fichiers de cet article : https://gist.github.com/mattdsteele/33f9b237fd13e9edc222

L'erreur que je vois :

Error: [$injector:modulerr] Failed to instantiate module ng due to:
TypeError: 'undefined' is not an object (evaluating 'Function.prototype.bind.apply')
    at instantiate (C:/app/node_modules/angular/angular.js:4622)
    at provider (C:/app/node_modules/angular/angular.js:4433)
    at C:/app/node_modules/angular/angular.js:385
    at forEach (C:/app/node_modules/angular/angular.js:355)
    at C:/app/node_modules/angular/angular.js:4423
    at ngModule (C:/app/node_modules/angular/angular.js:2492)
    at invoke (C:/app/node_modules/angular/angular.js:4604)
    at runInvokeQueue (C:/app/node_modules/angular/angular.js:4497)
    at C:/app/node_modules/angular/angular.js:4506
    at forEach (C:/app/node_modules/angular/angular.js:341)
    at loadModules (C:/app/node_modules/angular/angular.js:4529)
    at createInjector (C:/app/node_modules/angular/angular.js:4409)
    at workFn (C:/app/node_modules/angular-mocks/angular-mocks.js:2799)
    at C:/app/node_modules/angular-mocks/angular-mocks.js:2779
    at C:/app/sampleProvider_spec.js:38
http://errors.angularjs.org/1.5.0-rc.1/$injector/modulerr?p0=ng&p1=TypeError%3A%20'undefined'%20is%20not%20an%20object%20(evaluating%20'Function.prototype.bind.apply')%0A%20%20%20%20at%20instantiate%20(http%3A%2F%2Flocalhost%3A9876%2FC:/app%2Fnode_modules%2Fangular%2Fangular.js%3F0bb3a8e438d28a96d20c57229ea2d6f6be3eedbc%3A4622)%0A%20%20%20%20at%20provider%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fangular%2Fangular.js%3F0bb3a8e438d28a96d20c57229ea2d6f6be3eedbc%3A4433)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fangular%2Fangular.js%3F0bb3a8e438d28a96d20c57229ea2d6f6be3eedbc%3A385%0A%20%20%20%20at%20forEach%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fangular%2Fangular.js%3F0bb3a8e438d28a96d20c57229ea2d6f6be3eedbc%3A355)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fangular%2Fangular.js%3F0bb3a8e438d28a96d20c57229ea2d6f6be3eedbc%3A4423%0A%20%20%20%20at%20ngModule%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fangular%2Fangular.js%3F0bb3a8e438d28a96d20c57229ea2d6f6be3eedbc%3A2492)%0A%20%20%20%20at%20invoke%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fangular%2Fangular.js%3F0bb3a8e438d28a96d20c57229ea2d6f6be3eedbc%3A4604)%0A%20%20%20%20at%20runInvokeQueue%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fangular%2Fangular.js%3F0bb3a8e438d28a96d20c57229ea2d6f6be3eedbc%3A4497)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fangular%2Fangular.js%3F0bb3a8e438d28a96d20c57229ea2d6f6be3eedbc%3A4506%0A%20%20%20%20at%20forEach%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fangular%2Fangular.js%3F0bb3a8e438d28a96d20c57229ea2d6f6be3eedbc%3A341)%0A%20%20%20%20at%20loadModules%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fangular%2Fangular.js%3F0bb3a8e438d28a96d20c57229ea2d6f6be3eedbc%3A4529)%0A%20%20%20%20at%20createInjector%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fangular%2Fangular.js%3F0bb3a8e438d28a96d20c57229ea2d6f6be3eedbc%3A4409)%0A%20%20%20%20at%20workFn%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fangular-mocks%2Fangular-mocks.js%3F15873dbd705e0c8571c8c5d0a1bd3d60324beb9c%3A2799)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fangular-mocks%2Fangular-mocks.js%3F15873dbd705e0c8571c8c5d0a1bd3d60324beb9c%3A2779%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2FsampleProvider_spec.js%3F264ed98e3af6ef6813ab2d8fdc752a9b30a6e6db%3A38%0A%20%20%20%20at%20attemptSync%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1886)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1874%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1859%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A697%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A363%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A2479%0A%20%20%20%20at%20attemptAsync%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1916)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1871%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1859%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A697%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A2473%0A%20%20%20%20at%20attemptAsync%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1916)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1871%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1898%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1842%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A2467%0A%20%20%20%20at%20clearStack%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A660)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1881%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1898%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1842%0A%20%20%20%20at%20complete%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A371)%0A%20%20%20%20at%20clearStack%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A660)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1881%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1859%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A697%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A363%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A2479%0A%20%20%20%20at%20attemptAsync%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1916)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1871%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1859%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A697%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A2473%0A%20%20%20%20at%20attemptAsync%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1916)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1871%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1859%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A697%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A2473%0A%20%20%20%20at%20attemptAsync%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1916)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1871%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1859%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A697%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A2332%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A761%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fkarma-jasmine%2Flib%2Fadapter.js%3F3030709c83121e1b2ca4d1e657306b834fc13350%3A318%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fkarma.js%3A191%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fcontext.html%3A48
    at forEach (C:/app/node_modules/angular/angular.js:341)
    at loadModules (C:/app/node_modules/angular/angular.js:4529)
    at createInjector (C:/app/node_modules/angular/angular.js:4409)
    at workFn (C:/app/node_modules/angular-mocks/angular-mocks.js:2799)
    at C:/app/node_modules/angular-mocks/angular-mocks.js:2779
    at C:/app/sampleProvider_spec.js:38
    at C:/app/node_modules/angular/angular.js:4527
TypeError: 'undefined' is not an object (evaluating 'sample.getValue')
    at C:/app/sampleProvider_spec.js:42
PhantomJS 1.9.8 (Windows 7 0.0.0): Executed 2 of 2 (2 FAILED) ERROR (0.014 secs / 0.007 secs)

Les tests réussissent si je fais l'une des actions suivantes :

  • Rétablir angular et angular-mocks en 1.5.0-rc.0
  • Basculez le lanceur de PhantomJS à Chrome

Les tests ne passent pas si je :

  • Basculer le lanceur de test de Jasmine à Mocha

Testé sur Windows 7 et OS X.

won't fix

Commentaire le plus utile

Il m'était difficile de comprendre comment utiliser PhantomJS2 comme alternative au polyfill. Voici les étapes que j'ai utilisées, au cas où cela aiderait d'autres:

  1. Remplacez la dépendance npm karma-phantom-launcher par karma-phantomjs2-launcher (version 0.4.0 au moment de la rédaction)
  2. Changer les navigateurs karma.conf de 'PhantomJS' à 'PhantomJS2'

Tous les 9 commentaires

Phantom 1.x n'a pas Function.prototype.bind. Utilisez simplement Phantom 2.x ou un polyfill.

L'utilisation d'un polyfill a résolu le problème pour moi.

Fait intéressant, nous avions déjà un polyfill Function.prototype.bind dans notre code ( version de MDN ) mais il ne semblait pas se déclencher dans notre environnement PhantomJS.

Le passage à ce polyfill a fonctionné.

Faut-il l'annoncer plus largement ? Je ne sais pas s'il s'agit nécessairement d'un changement décisif, mais il y a suffisamment d'utilisation de Phantom 1.x + Karma pour que je suppose que cela touchera beaucoup de gens.

PhantomJs ne fait pas partie des navigateurs officiellement pris en charge. De plus, Phantom JS 1 est très ancien. Nous nous appuierons sur les réseaux sociaux ici pour faire passer le mot. Je laisse ce problème ouvert un peu à cause de cela.

Il m'était difficile de comprendre comment utiliser PhantomJS2 comme alternative au polyfill. Voici les étapes que j'ai utilisées, au cas où cela aiderait d'autres:

  1. Remplacez la dépendance npm karma-phantom-launcher par karma-phantomjs2-launcher (version 0.4.0 au moment de la rédaction)
  2. Changer les navigateurs karma.conf de 'PhantomJS' à 'PhantomJS2'

@gillius Merci, c'est une bonne information. Je vais clore ce sujet car nous ne pouvons plus rien y faire.

Pourquoi ce n'est pas dans le changelog ?

Parce que nous ne soutenons pas officiellement PhamtomJS

Pour info : karma-phantomjs2-launcher est obsolète. Si vous mettez à jour karma-phantomjs-launcher vers "1.0.0", vous obtenez le même effet (PhantomJS 2.1.1) et vous n'avez pas besoin de modifier karma.conf.

Pour moi. https://www.npmjs.com/package/phantomjs-polyfill
Ce polyfill a fonctionné. La tonnelle répertoriée ci-dessus n'a pas résolu le problème.

Cette page vous a été utile?
0 / 5 - 0 notes