У меня есть простой, но сложный (сейчас) компонент: это просто форма входа , поэтому я не буду вставлять html. Похоже, это:Angular2: компонент тестирования с зависимой инъекцией
login.component.ts
@Component({
selector: 'login',
providers: [ModuleLoaderService, LoginService],
templateUrl: 'login.component.html',
directives: [CORE_DIRECTIVES, RouterLink],
pipes: [TranslationPipe]
})
export class LoginComponent {
//... some stuff
constructor(public router: Router, public http: Http, private _translation: TranslationService,
private _loginService: LoginService, private _moduleLoaderService: ModuleLoaderService) {
// do stuff using translation, etc
}
....
ngOnInit() {
`....bla bla
}
Вот тест я начинаю пытаться, который я думаю, что это полностью из:
describe('Login form',() => {
beforeEachProviders(() => [
provide(Http, {useFactory: (backend: ConnectionBackend, defaultOptions: BaseRequestOptions) => {
return new Http(backend, defaultOptions);
}, deps: [MockBackend, BaseRequestOptions]}),
TranslationService,
LoginService
]);
it('should check translated labels', injectAsync([TestComponentBuilder], (tcb) => {
return tcb.createAsync(MockLoginComponent).then((fixture) => {
fixture.detectChanges();
let compiled = fixture.debugElement.nativeElement;
expect(true).toBe(true);
});
}));
});
и мой TranslationService:
import { Injectable } from 'angular2/core';
import { TranslateService } from 'ng2-translate';
@Injectable()
export class TranslationService {
constructor(private _translate: TranslateService) {
//
}
Ошибки:
Неудачные для загрузки ресурса: сервер ответил статусом 404 (не найдено): http://localhost:9876/ng2-translate
Я хочу начать писать тесты для этого компонента. Первый тест, который я думал, будет хорошим началом: тестирование переведенных этикеток правильное (или что-то еще достаточно простое). Я не знаю, как вводить или издеваться над всеми этими аргументами конструктора. Любой намек по-настоящему ценится.
Update: Так я вроде игнорировал компоненту зависимости сейчас, и я был в состоянии реально получить компонент для тестирования:
describe('Login form',() => {
beforeEachProviders(() => [
HTTP_PROVIDERS,
provide(XHRBackend, { useClass: MockBackend }),
provide(Router, { useClass: MockRouter }),
TranslateService,
TranslationService,
LoginService,
provide(TranslateLoader, {
useFactory: (http: Http) => new TranslateStaticLoader(http, 'assets/i18n', '.json'),
deps: [Http]
}),
TranslateService,
ModuleLoaderService
]);
it('should pre-populate username and pass from localStorage', injectAsync([TestComponentBuilder], (tcb) => {
return tcb.createAsync(LoginComponent).then((fixture) => {
fixture.detectChanges();
let compiled = fixture.debugElement.nativeElement;
localStorage.setItem('username', 'storedUsername');
expect(compiled.querySelector('input .ng-untouched')).toHaveText('storedUsername');
});
}));
Селектор CSS, кажется, не работает и переводные этикетки не показывать в браузере Кармы либо ...
А что обеспечивает более конкретный пример о том, что вы хотите проверить. Что вы пробовали? В чем проблема? –
Спасибо, что посмотрели. Поэтому я добавил свою попытку описания: Как я уже упоминал ранее, мне нужно начать работу с тестированием этого компонента, теперь давайте скажем, что мне просто нужно проверить, есть ли переведенные метки для этой формы входа и исправлены. Для этого я подумал, что мне нужно ввести TranslationService (см. Мою службу перевода, которая опирается на ng2-translate). Очевидно, это не работает, потому что я понятия не имею, как это сделать. Спасибо ! –
Я еще один шаг: исправлена ошибка отсутствия некоторых необходимых библиотек, добавив их в файл karma.conf.js. Теперь я могу разобраться с фактическим тестом. Далее: исправить поставщиков! –