Angular.js: Function.prototype.bind.apply(...) n'est pas un constructeur

Créé le 22 juin 2016  ·  2Commentaires  ·  Source: angular/angular.js

J'essaie d'apprendre angular-tdd

avec cette version mes tests fonctionnent bien
version des dépendances
angulaire : 1.4.8
moqueurs angulaires : 1.4.8
nœud : v4.4.5
karma-cli : 0,13.22

mais quand j'utilise
versions
"angulaire": "^1.5.7"
"angular-mocks": "^1.5.7"

ça renvoie une erreur

karma start karma.conf.js

22 06 2016 16:53:04.002:WARN [karma]: No captured browser, open http://localhost:9876/
22 06 2016 16:53:04.012:INFO [karma]: Karma v0.13.22 server started at http://localhost:9876/
22 06 2016 16:53:04.018:INFO [launcher]: Starting browser Chrome
22 06 2016 16:53:05.959:INFO [Chrome 51.0.2704 (Linux 0.0.0)]: Connected on socket /#Vfy_Fpt6BZ2INRyEAAAA with id 36097936
Chrome 51.0.2704 (Linux 0.0.0) calculator sum 1 + 1 should equal 2 FAILED
    TypeError: Function.prototype.bind.apply(...) is not a constructor
        at Object.instantiate (/home/malanay/workspace/AngularJs-BDD-101/node_modules/angular/angular.min.js:41:477)
        at /home/kiro112/workspace/AngularJs-BDD-101/node_modules/angular/angular.min.js:90:3
        at /home/kiro112/workspace/AngularJs-BDD-101/node_modules/angular-mocks/angular-mocks.js:2214:12
        at Object.it (/home/kiro112/workspace/AngularJs-BDD-101/tests/calculator.controller.test.js:17:21)
Chrome 51.0.2704 (Linux 0.0.0): Executed 1 of 1 (1 FAILED) (0 secs / 0.027 Chrome 51.0.2704 (Linux 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.037 secs / 0.027 secs)
invalid

Commentaire le plus utile

Le problème est d'utiliser la syntaxe de la grosse flèche pour définir le constructeur de fonction pour la classe de contrôleur. En supposant que votre fonction transmise comme deuxième argument à module.controller soit Foo , Angular appellera new Foo(...) dessus, ce qui est illégal avec la syntaxe de la grosse flèche dans ES6.

Tous les 2 commentaires

Le problème est d'utiliser la syntaxe de la grosse flèche pour définir le constructeur de fonction pour la classe de contrôleur. En supposant que votre fonction transmise comme deuxième argument à module.controller soit Foo , Angular appellera new Foo(...) dessus, ce qui est illégal avec la syntaxe de la grosse flèche dans ES6.

@wesleycho , a raison. Les contrôleurs doivent être instanciables (c'est-à-dire appelés avec new ), donc des choses comme les fonctions fléchées ( () => {...} ) et les méthodes d'objet abrégé ( {someMethod() {...}} ) ne conviennent pas aux contrôleurs.

Voir https://github.com/angular/angular.js/issues/14766#issuecomment -226005516 pour plus de détails.

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