2016-09-13 18 views
1

Я пытаюсь настроить тесты, в которых мы используем Angular 1.5, TSify и Karma. Я очень, близко, но я бегу на вопрос, что я не совсем получили право:Угловая, карма, tsify, беды

Я после установки, описанной здесь: https://github.com/cmlenz/tsify-test (этот пример не включает в себя угловой)

Я получаю сообщение об ошибке: «Невозможно установить свойство« mock »undefined»

Это должно быть либо тайм-аут, либо предмет сферы - либо угловые-макеты загружаются слишком рано, либо браузеру обертывая объем угловой переменной, а издевательства не видят этого. Без понятия.

Вот соответствующие части моего karma.conf.js файл:

frameworks: ['browserify', 'jasmine'], 

    files: [ 
     'https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js', 
     './node_modules/angular-mocks/angular-mocks.js', 
     './modules/**/*.spec.ts' 
    ], 

    exclude: [], 

    preprocessors: { 
     '**/*.ts': 'browserify' 
    }, 

    browserify: { 
     debug: true, 
     plugin: [ 
      ['tsify'] 
     ] 
    }, 

Это должно иметь что-то делать с тем, как я загружаю издеваюсь - это не используется моим угловым приложением, просто тесты, так что это должно иметь какое-то отношение к этому.

Любые подсказки?

+1

Ваш массив 'files' должен содержать ** все ** файлы, необходимые для тестирования. Где 'angular.js', а также ваши файлы приложений? – Phil

+1

Из вашей конфигурации видно, что с помощью NPM был установлен «угловой макс». Если «угловой» также был установлен с NPM и входит в комплект с помощью 'require' в файле' .ts', это, скорее всего, проблема, так как «угловые матки» должны загружаться после «углового». – cartant

+0

@Phil Browserify объединяет все файлы (включая файлы поставщиков) в один пакет. В примере, с которого я работаю, они только что зарегистрировали **/*. Ts glob в разделе предварительного процессора. Если это не так, я могу изменить его. Что это должно быть? (Я предполагаю, что мне не нужно будет указывать на каждый файл поставщика, так как браузеру упаковывают их в комплект). – JMarsch

ответ

1

angular-mocks должен быть загружен после angular и с вашей текущей Карма configuarion, что не происходит - angular не загружается, пока это не требуется в одном из .ts файлов, на которых один из ваших .spec.ts файлов зависит.

Одно решение было бы добавить дополнительный файл, который требует как angular и angular-mocks и гарантировать, что файл предшествует .spec.ts файлы конфигурации Кармы files.

Например, файл с именем require-angular-mocks.js может быть создано:

require('angular'); 
require('angular-mocks'); 

И можно было бы добавить к конфигурации Карма (заменяющих angular-mocks под node_modules):

files: [ 
    'https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js', 
    './require-angular-mocks.js', 
    './modules/**/*.spec.ts' 
], 

preprocessors: { 
    '**/*.js': 'browserify', 
    '**/*.ts': 'browserify' 
}, 

Это должно гарантировать, что angular и angular-mocks загружены в правильном порядке и загружены перед вашими спецификациями. Обратите внимание, что если это файл .js, вам понадобится другая запись в конфигурации preprocessors Karma.

+0

Получил задание, и просто пришел, чтобы попробовать это. Это сработало! Это было замечательно! Спасибо за помощь. Я хотел бы узнать больше о том, как работает трубопровод кармы. Знаете ли вы, что вы писали об этом? – JMarsch

+0

К сожалению, нет, я не знаю никаких полезных писем для Кармы. Полагаю, мое понимание постепенно расширилось, прочитав [конфигурационную документацию] (http://karma-runner.github.io/1.0/config/configuration-file.html), чтобы решить проблемы. Параметр ['files'] (http://karma-runner.github.io/1.0/config/files.html) является его сутью. Карма использует это для создания HTML-файла, который он обслуживает. Функция Browserify должна работать, уменьшая записи '.js' в' files' до одного пакета, который включен как '