Angular.js: Function.prototype.bind.apply (...) не является конструктором

Созданный на 22 июн. 2016  ·  2Комментарии  ·  Источник: angular/angular.js

Я пытаюсь выучить angular-tdd

с этими версиями мои тесты работают нормально
версия зависимостей
угловой: 1.4.8
angular-mocks: 1.4.8
узел: v4.4.5
карма-кли: 0.13.22

но когда я использую
версии
"угловой": "^ 1.5.7"
"angular-mocks": "^ 1.5.7"

это выдает ошибку

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)

Самый полезный комментарий

Проблема заключается в использовании синтаксиса толстой стрелки для определения конструктора функции для класса контроллера. Предполагая, что ваша функция, переданная в качестве второго аргумента в module.controller, равна Foo , Angular вызовет для нее new Foo(...) , что недопустимо с синтаксисом жирной стрелки в ES6.

Все 2 Комментарий

Проблема заключается в использовании синтаксиса толстой стрелки для определения конструктора функции для класса контроллера. Предполагая, что ваша функция, переданная в качестве второго аргумента в module.controller, равна Foo , Angular вызовет для нее new Foo(...) , что недопустимо с синтаксисом жирной стрелки в ES6.

@wesleycho , верно. Контроллеры должны быть инстанцируемыми (т.е. вызываемыми с помощью new ), поэтому такие вещи, как стрелочные функции ( () => {...} ) и методы сокращенных объектов ( {someMethod() {...}} ), не подходят для контроллеров.

См. Https://github.com/angular/angular.js/issues/14766#issuecomment -226005516 для получения дополнительной информации.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги