У меня есть компонент, который я пытаюсь модульного тестирования, но я получаю эти ошибки, в зависимости от своих импортных заявлений:Barrel Import Появляется To Break Load Order
Error: Cannot resolve all parameters for 'MyComponent'(undefined, FormBuilder).
TypeError: Cannot read property 'toString' of undefined
Мой компонент принимает 2 параметра, один FormBuilder и один пользовательский сервис, который должен быть введен:
import {MyService} from '../';
@Component({
...,
providers: [MyService]
})
class MyComponent {
constructor(service: MyService, fb: FormBuilder) { ... }
...
}
и мой блок тест установки следующим образом:
import {MyComponent} from './';
import {MyService} from '../';
describe('Component: MyComponent',() => {
let builder: TestComponentBuilder;
beforeEachProviders(() => [
MyService,
MyComponent
]);
beforeEach(inject([TestComponentBuilder], function (tcb: TestComponentBuilder) {
builder = tcb;
}));
it('should inject the component', inject([MyComponent],
(component: MyComponent) => {
expect(component).toBeTruthy();
})
);
}
Импорт, как представляется, проблема, так как я пытаюсь использовать бочки:
|
|- my-component
| |- index.ts
| |- my.component.ts
| |- my.component.spec.ts
|
|- my-service
| |- index.ts
| |- my.service.ts
|
|- index.ts
Внутри моих index.ts файлов, я делаю:
export * from '<filename>';
export * from '<directory>';
в зависимости от обстоятельств.
Однако, когда я изменяю импорт в модуле unit и компонент, чтобы напрямую ссылаться на служебный файл, работает единичный тест.
import {MyService} from '../my-service/my.service';
Я использую угловой кли в этом проекте и SystemJS конфигурируется с сгенерированным файлом конфигурации от того:
...
const barrels: string[] = [
...,
// App specific barrels.
'app',
'app/my-service',
'app/my-component'
/** @cli-barrel */
];
const cliSystemConfigPackages: any = {};
barrels.forEach((barrelName: string) => {
cliSystemConfigPackages[barrelName] = { main: 'index' };
});
/** Type declaration for ambient System. */
declare var System: any;
// Apply the CLI SystemJS configuration.
System.config({
map: {
'@angular': 'vendor/@angular',
'rxjs': 'vendor/rxjs',
'main': 'main.js'
},
packages: cliSystemConfigPackages
});
...
Кажется, что когда я импортировать из бочек, компоненты и определения сервиса не загружаются перед модульным тестовым кодом. Само приложение будет препровождать и запускать в любом случае.
Извините, если это просит широкий вопрос, но я по-прежнему довольно новыми для бочек и SystemJS, и я не знаю, как сузить область далее:
Является ли это ошибка с SystemJS/Jasmine/TypeScript/Angular2 или я что-то не так в настройках?
Звучит точно так же, как то, что я вижу, спасибо. Надеюсь, что это будет исправлено в ближайшее время. – awiseman
Я использую проект angular2-seed, и просто трачу 2 часа +, пытаясь понять, почему моя служба не была разрешена как поставщик в моем конструкторе компонентов ....... чертова услуга была объявлена после того, как компонент в barrel index.ts. Это было сложно обнаружить! – Ryan