Tôi đang cố thử nghiệm một thành phần có chứa phần tử nhập văn bản. Tôi muốn xác minh rằng trạng thái của thành phần thay đổi như mong đợi khi giá trị của đầu vào văn bản thay đổi. Tất nhiên, đầu vào văn bản sử dụng chỉ thị ngModel (liên kết hai chiều).Làm cách nào để kích hoạt cập nhật mô hình ngModel trong thử nghiệm đơn vị Angular 2?
Mặc dù thành phần hoạt động tốt khi chạy, tôi gặp sự cố khi tạo thử nghiệm hợp lệ, vượt qua. Tôi đã đăng những gì tôi nghĩ rằng nên làm việc dưới đây, và kết quả kiểm tra sau đó.
Tôi đang làm gì sai?
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)
Điều gì về việc đọc [mã nguồn] (https://github.com/angular/angular/blob/f9fb72fb0e9bcbda7aeebbf8321ce5d70d78ecee/modules/angular2/test/common/forms/integration_spec.ts#L824)? –
Cảm ơn, tôi dường như đã bỏ qua điều này trong khi cọ rửa nguồn cho một ví dụ có liên quan. Thật không may là ví dụ này sử dụng những gì dường như là một API riêng (dispatchEvent từ angular2/testing_internal), nhưng nó đã cho tôi ý tưởng để thử fakeAsync ít nhất. –