2016-12-20 12 views
1

Мы тянули наши волосы в течение нескольких дней и, похоже, не могли справиться с реальной проблемой. Мы хотели создать тестовый стенд, чтобы увеличить охват кода, но это оказалось не так просто, как предполагалось.JSPM и testbench и необъяснимые результаты «testing.js»

После включения правильных файлов зон мы обнаружили, посмотрев на QuickStart из углового, что нам нужно было вызвать TestBed.initTestEnvironment. Что нужно параметры, которые мы импортировали:

import * as browserTesting from '@angular/platform-browser-dynamic/testing'; 
 

 

 
TestBed.initTestEnvironment(
 
    browserTesting.BrowserDynamicTestingModule, 
 
    browserTesting.platformBrowserDynamicTesting() 
 
);

Однако, как только мы пытаемся запустить это через Кармы (с жасмином) бежим в 404:

Running "karma:single" (karma) task 
Verifying property karma.single exists in config...OK 
File: [no files] 
Options: background=false, client={} 
20 12 2016 13:22:25.757:INFO [karma]: Karma v0.13.22 server started at http://localhost:9876/ 
20 12 2016 13:22:25.764:INFO [launcher]: Starting browser Chrome 
20 12 2016 13:22:26.439:INFO [Chrome 54.0.2840 (Linux 0.0.0)]: Connected on socket cuixl-0soveFUA_PAAAA with id 58970475 
20 12 2016 13:22:26.711:WARN [web-server]: 404: /base/jspm_packages/npm/@angular/[email protected]/bundles/compiler-testing.umd.js/index.js 
20 12 2016 13:22:26.713:WARN [web-server]: 404: /base/jspm_packages/npm/@angular/[email protected]/bundles/core-testing.umd.js/index.js 
20 12 2016 13:22:26.714:WARN [web-server]: 404: /base/jspm_packages/npm/@angular/[email protected]/bundles/platform-browser-testing.umd.js/index.js 
Chrome 54.0.2840 (Linux 0.0.0) ERROR 
    Error: (SystemJS) XHR error (404 Not Found) loading /home/arend/Documents/Projects/Barco/opspace/barco-opspace/jspm_packages/npm/@angular/[email protected]/bundles/compiler-testing.umd.js/index.js 
    Error: XHR error (404 Not Found) loading /home/arend/Documents/Projects/Barco/opspace/barco-opspace/jspm_packages/npm/@angular/[email protected]/bundles/compiler-testing.umd.js/index.js 
     at XMLHttpRequest.wrapFn [as _onreadystatechange] (/home/arend/Documents/Projects/Barco/opspace/barco-opspace/jspm_packages/npm/[email protected]/dist/zone.js:729:25) [<root>] 
     at Zone.runTask (/home/arend/Documents/Projects/Barco/opspace/barco-opspace/jspm_packages/npm/[email protected]/dist/zone.js:135:41) [<root> => <root>] 
     at XMLHttpRequest.ZoneTask.invoke (/home/arend/Documents/Projects/Barco/opspace/barco-opspace/jspm_packages/npm/[email protected]/dist/zone.js:285:27) [<root>] 
    Error loading /home/arend/Documents/Projects/Barco/opspace/barco-opspace/jspm_packages/npm/@angular/[email protected]/bundles/compiler-testing.umd.js/index.js as "./bundles/compiler-testing.umd.js/index" from /home/arend/Documents/Projects/Barco/opspace/barco-opspace/jspm_packages/npm/@angular/[email protected]/testing.js 

, глядя на «jspm_packages/npm/@ angular/compiler @ 2.3.0/testing.js», мы быстро обнаружили, что он содержал неправильную информацию:

module.exports = require('./bundles/compiler-testing.umd.js/index'); 

вместо ожидаемого:

module.exports = require('./bundles/compiler-testing.umd'); 

Если я вручную исправить это, все работает отлично. Итак, мой вопрос: Как мы предотвращаем создание JSPM или кого-либо из создающего неверный файл test.js?

Наша идея заключается в том, что по какой-то причине, JSPM считает, что файл компилятора testing.umd.js папка и поэтому присоединяет/индекс к нему

* мы включили угловые файлы через конфиг. ЯШ: *

System.config({ 
    defaultJSExtensions: true, 
    transpiler: "typescript", 
    paths: { 
    "github:*": "jspm_packages/github/*", 
    "npm:*": "jspm_packages/npm/*" 
    }, 

    map: { 
    "@angular/common": "npm:@angular/[email protected]", 
    "@angular/compiler": "npm:@angular/[email protected]", 
    "@angular/core": "npm:@angular/[email protected]", 
    "@angular/core/testing": "npm:@angular/[email protected]/bundles/core-testing.umd.js", 
    "@angular/forms": "npm:@angular/[email protected]", 
    "@angular/http": "npm:@angular/[email protected]", 
    "@angular/http/testing": "npm:@angular/[email protected]/bundles/http-testing.umd.js", 
    "@angular/platform-browser": "npm:@angular/[email protected]", 
    "@angular/platform-browser-dynamic": "npm:@angular/[email protected]", 
    "@angular/platform-browser-dynamic/testing": "npm:@angular/[email protected]/bundles/platform-browser-dynamic-testing.umd.js", 
    "@angular/router": "npm:@angular/[email protected]", 

ответ

0

После долгого и тщательного поиска и часы сравнения, я действительно нашел эту проблему и решить все это:

  • Проблема: все угловые примеры2 используют npm_modules, и поэтому они адаптировали файл systemjs для использования папки npm, однако мы предпочитаем использовать JSPM, так как это обеспечивает чистое сокращение между нашей базой данных/инфраструктурой и нашим интерфейсом. Позволяя нам, не меняя нашей конфигурации, добавлять/удалять/обновлять пакеты. Поскольку модули angular2 фактически являются 2 модулями в одном, это заставило JSPM к забавным вещам с этим и, следовательно, в конце концов, всегда пыталось загрузить неправильный файл: например. «core-testing.umd.js/index» вместо «core-testing.umd».
  • Решение: я, наконец, ударил золота: обновление до JSPM 0,17 (на момент написания этого все еще находится в бета-версии)

Новый JSPM правильно определяет модуль тестирования, а также и загрузка теперь все сделано правильно!