Тесты Angular, karma/jasmine не обрабатывают .bind

Я пишу модульные тесты для некоторых своих функций, и у исполнителя тестов, похоже, есть проблема со связанной функцией. Я привязываю функцию, поэтому у меня есть ссылка на this внутри внутренней функции. Вот код:

                  loadStates: function(name, stateName, options) {

                    if (myModule.getModule(name) !== undefined) {
                        this.prepState(name, stateName, options);

                    } else {
                        var bindForCheck = this.prepState.bind(this);

                        //module cannot be found check for 5 seconds
                        $log.warn("Requesting " + name + "...");
                        var timeToCheck = true;
                        setTimeout(function() {
                            timeToCheck = false;
                        }, 5000);
                        var check = {
                            init: function() {
                                check.checkAgain();
                            },
                            checkAgain: function() {
                                if (timeToCheck) {
                                    if (myModule.getModule(name) !== undefined) {
                                        bindForCheck(name, stateName, options);
                                    } else {
                                        //still doesn't exists
                                        setTimeout(check.checkAgain, 200);
                                    }
                                } else {
                                    //doesn't exist after 5 seconds
                                    $log.error("Requested module (" + name + ") could not be found at this time.");
                                }
                            }
                        };
                        check.init();
                    }

                }

Так что проблема с

 var bindForCheck = this.prepState.bind(this);

Это просто позволяет мне вызывать внешнюю функцию внутри функции check.checkAgain().

Средство запуска тестов выдает эту ошибку, когда я пытаюсь запустить раздел else функции.

TypeError: 'undefined' is not a function (evaluating 'this.prepState.bind(this)')

Могла бы помочь здесь, это поставило меня в тупик, как это исправить. Спасибо!


person ajmajmajma    schedule 08.04.2015    source источник


Ответы (1)


Вероятно, вы используете PhantomJS версии ‹ 2. Вот проблема на github. Вам придется либо обновить PhantomJS, либо использовать полифилл. Существует bower-пакет, который должен помочь.

person fatbeard    schedule 24.04.2015