unitarios unitarias unit test run pruebas angular unit-testing angular2-testing

unitarias - Valor de entrada de prueba de unidad angular



test service angular 4 (3)

Las entradas no tienen contenido de texto, solo un valor. Así que expect(field.textContent).toBe(''someValue''); es inútil Eso es probablemente lo que está fallando. La segunda expectativa debería pasar sin embargo. Aquí hay una prueba completa.

@Component({ template: `<input type="text" [(ngModel)]="user.username"/>` }) class TestComponent { user = { username: ''peeskillet'' }; } describe(''component: TestComponent'', () => { beforeEach(() => { TestBed.configureTestingModule({ imports: [FormsModule], declarations: [ TestComponent ] }); }); it(''should be ok'', async(() => { let fixture = TestBed.createComponent(TestComponent); fixture.detectChanges(); fixture.whenStable().then(() => { let input = fixture.debugElement.query(By.css(''input'')); let el = input.nativeElement; expect(el.value).toBe(''peeskillet''); el.value = ''someValue''; el.dispatchEvent(new Event(''input'')); expect(fixture.componentInstance.user.username).toBe(''someValue''); }); })); });

He estado leyendo la documentación oficial de Angular2 para pruebas de unidad ( https://angular.io/docs/ts/latest/guide/testing.html ) pero me cuesta configurar el valor del campo de entrada de un componente para que se refleje en la propiedad del componente (enlazado a través de ngModel). La pantalla funciona bien en el navegador, pero en la prueba de la unidad parece que no puedo establecer el valor de los campos.

Estoy usando el código de abajo. El "accesorio" se inicializa correctamente ya que otras pruebas funcionan bien. "comp" es una instancia de mi componente, y el campo de entrada está vinculado a "user.username" a través de ngModel.

it(''should update model...'', async(() => { let field: HTMLInputElement = fixture.debugElement.query(By.css(''#user'')).nativeElement; field.value = ''someValue'' field.dispatchEvent(new Event(''input'')); fixture.detectChanges(); expect(field.textContent).toBe(''someValue''); expect(comp.user.username).toBe(''someValue''); }));

Mi versión de Angular2: "@angular/core": "2.0.0"


Solo agrega

fixture.detectChanges(); fixture.whenStable().then(() => { // here your expectation })


Use su expectativa / whenStable.then dentro de la función whenStable.then esta manera:

component.label = ''blah''; fixture.detectChanges(); fixture.whenStable().then(() => { expect(component.label).toBe(''blah''); }