I am trying to test a component containing a text input element. I want to check that the state of the component changes as expected when the value of the text input changes. Of course, text input uses the ngModel directive (two-way binding).
Despite the fact that the component works fine at runtime, I had a problem with creating a valid passing test. I posted what I think should work below, and the test result after that.
What am I doing wrong?
TEST:
import {Component} from 'angular2/core'; import {describe, it, injectAsync, TestComponentBuilder} from 'angular2/testing'; import {FORM_DIRECTIVES} from 'angular2/common'; import {By} from 'angular2/platform/common_dom'; class TestComponent { static get annotations() { return [ new Component({ template: '<input type="text" [(ngModel)]="name" /><p>Hello {{name}}</p>', directives: [FORM_DIRECTIVES] }) ] } } describe('NgModel', () => { it('should update the model', injectAsync([TestComponentBuilder], tcb => { return tcb .createAsync(TestComponent) .then(fixture => { fixture.nativeElement.querySelector('input').value = 'John'; const inputElement = fixture.debugElement.query(By.css('input')); inputElement.triggerEventHandler('input', { target: inputElement.nativeElement }); fixture.detectChanges(); expect(fixture.componentInstance.name).toEqual('John'); }); })); });
OUTPUT:
Chrome 45.0.2454 (Mac OS X 10.10.5) NgModel should update the model FAILED Expected undefined to equal 'John'. at /Users/nsaunders/Projects/ng2-esnext-seed/src/test/ngmodel.spec.js!transpiled:41:52 at ZoneDelegate.invoke (/Users/nsaunders/Projects/ng2-esnext-seed/node_modules/angular2/bundles/angular2-polyfills.js:322:29) at Zone.run (/Users/nsaunders/Projects/ng2-esnext-seed/node_modules/angular2/bundles/angular2-polyfills.js:218:44) at /Users/nsaunders/Projects/ng2-esnext-seed/node_modules/angular2/bundles/angular2-polyfills.js:567:58 at ZoneDelegate.invokeTask (/Users/nsaunders/Projects/ng2-esnext-seed/node_modules/angular2/bundles/angular2-polyfills.js:355:38) at Zone.runTask (/Users/nsaunders/Projects/ng2-esnext-seed/node_modules/angular2/bundles/angular2-polyfills.js:254:48) at drainMicroTaskQueue (/Users/nsaunders/Projects/ng2-esnext-seed/node_modules/angular2/bundles/angular2-polyfills.js:473:36) at XMLHttpRequest.ZoneTask.invoke (/Users/nsaunders/Projects/ng2-esnext-seed/node_modules/angular2/bundles/angular2-polyfills.js:425:22)
source share