В настоящее время я учу себя Angular, чтобы стать программистом, и у меня есть вопрос относительно приложения, которое я создаю. Я построил канал, чтобы проверить, была ли включена пользовательская функция
import { Inject, Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'hasFeature'
})
export class HasFeaturePipe implements PipeTransform {
private $user: any;
constructor(@Inject('$user') $user) {
this.$user = $user;
}
transform(value: any, args?: any): any {
return this.$user.hasFeature(value);
}
}
'$ user' определено в приложении AngularJS, которое я создал и слил с моим Angular APP, так что это немного гибридное приложение, которое я создаю. Я завернул $ user в небольшую оболочку провайдера, которую я добавил в массив провайдеров моего файла app.module.ts. Это содержимое оболочки:
const userService = ($injector: any) => $injector.get('$user');
export const ANGULARJS_SERVICES = [{
provide: '$user',
useFactory: userService,
deps: ['$injector']
}];
и вот как я делаю это доступным в файле app.module.ts
провайдеры: [I18N_PROVIDERS]
. Теперь я не уверен, как добавить зависимость $ user в мои тесты конвейера и как правильно тестировать, вот что у меня есть:
const mock$user = {hasFeature: (value) => {value === 'featureOK'}};
describe('HasFeaturePipe', () => {
it('create an instance', () => {
const pipe = new HasFeaturePipe('n/a');
expect(pipe).toBeTruthy();
});
describe('hasFeature', () => {
it('should', inject(['$user'], (mock$user) => {
const pipe = new HasFeaturePipe('featureOK');
expect(pipe).toBeTruthy(true);
}))
});
});
Естественно, это не работает, и я получаю сообщение об ошибке " Тип 'string []' нельзя назначить типу 'InjectionToken <(done: DoneFn) => void>'.
Свойство '_desc' отсутствует в типе 'string []'."
Может кто-нибудь помочь объяснить, как решить мою проблему? Труба отлично работает в приложении, но я должен быть хорошим разработчиком и тестировать весь свой код. Заранее спасибо.