1- import { async , ComponentFixture , TestBed } from '@angular/core/testing' ;
1+ import { async , ComponentFixture , TestBed , fakeAsync , tick } from '@angular/core/testing' ;
22import { NgControl , FormsModule } from '@angular/forms' ;
33import { Component , DebugElement } from '@angular/core' ;
44import { By } from '@angular/platform-browser' ;
@@ -223,7 +223,7 @@ describe('MdRadio', () => {
223223 let groupDebugElement : DebugElement ;
224224 let groupNativeElement : HTMLElement ;
225225 let radioDebugElements : DebugElement [ ] ;
226- let radioNativeElements : HTMLElement [ ] ;
226+ let innerRadios : DebugElement [ ] ;
227227 let radioLabelElements : HTMLLabelElement [ ] ;
228228 let groupInstance : MdRadioGroup ;
229229 let radioInstances : MdRadioButton [ ] ;
@@ -242,8 +242,8 @@ describe('MdRadio', () => {
242242 groupNgControl = groupDebugElement . injector . get ( NgControl ) ;
243243
244244 radioDebugElements = fixture . debugElement . queryAll ( By . directive ( MdRadioButton ) ) ;
245- radioNativeElements = radioDebugElements . map ( debugEl => debugEl . nativeElement ) ;
246245 radioInstances = radioDebugElements . map ( debugEl => debugEl . componentInstance ) ;
246+ innerRadios = fixture . debugElement . queryAll ( By . css ( 'input[type="radio"]' ) ) ;
247247
248248 radioLabelElements = radioDebugElements
249249 . map ( debugEl => debugEl . query ( By . css ( 'label' ) ) . nativeElement ) ;
@@ -280,16 +280,16 @@ describe('MdRadio', () => {
280280 expect ( groupNgControl . pristine ) . toBe ( true ) ;
281281 expect ( groupNgControl . touched ) . toBe ( false ) ;
282282
283- // After changing the value programmatically, the control should become dirty (not pristine),
283+ // After changing the value programmatically, the control should stay pristine
284284 // but remain untouched.
285285 radioInstances [ 1 ] . checked = true ;
286286 fixture . detectChanges ( ) ;
287287
288288 expect ( groupNgControl . valid ) . toBe ( true ) ;
289- expect ( groupNgControl . pristine ) . toBe ( false ) ;
289+ expect ( groupNgControl . pristine ) . toBe ( true ) ;
290290 expect ( groupNgControl . touched ) . toBe ( false ) ;
291291
292- // After a user interaction occurs (such as a click), the control should remain dirty and
292+ // After a user interaction occurs (such as a click), the control should become dirty and
293293 // now also be touched.
294294 radioLabelElements [ 2 ] . click ( ) ;
295295 fixture . detectChanges ( ) ;
@@ -299,27 +299,31 @@ describe('MdRadio', () => {
299299 expect ( groupNgControl . touched ) . toBe ( true ) ;
300300 } ) ;
301301
302- it ( 'should update the ngModel value when selecting a radio button' , ( ) => {
303- radioInstances [ 1 ] . checked = true ;
302+ it ( 'should write to the radio button based on ngModel' , fakeAsync ( ( ) => {
303+ testComponent . modelValue = 'chocolate' ;
304+ fixture . detectChanges ( ) ;
305+ tick ( ) ;
304306 fixture . detectChanges ( ) ;
305307
308+ expect ( innerRadios [ 1 ] . nativeElement . checked ) . toBe ( true ) ;
309+ } ) ) ;
310+
311+ it ( 'should update the ngModel value when selecting a radio button' , ( ) => {
312+ innerRadios [ 1 ] . nativeElement . dispatchEvent ( new Event ( 'change' ) ) ;
313+ fixture . detectChanges ( ) ;
306314 expect ( testComponent . modelValue ) . toBe ( 'chocolate' ) ;
307315 } ) ;
308316
309317 it ( 'should update the model before firing change event' , ( ) => {
310318 expect ( testComponent . modelValue ) . toBeUndefined ( ) ;
311319 expect ( testComponent . lastEvent ) . toBeUndefined ( ) ;
312320
313- groupInstance . value = 'chocolate' ;
321+ innerRadios [ 1 ] . nativeElement . dispatchEvent ( new Event ( 'change' ) ) ;
314322 fixture . detectChanges ( ) ;
315-
316- expect ( testComponent . modelValue ) . toBe ( 'chocolate' ) ;
317323 expect ( testComponent . lastEvent . value ) . toBe ( 'chocolate' ) ;
318324
319- groupInstance . value = 'vanilla' ;
325+ innerRadios [ 0 ] . nativeElement . dispatchEvent ( new Event ( 'change' ) ) ;
320326 fixture . detectChanges ( ) ;
321-
322- expect ( testComponent . modelValue ) . toBe ( 'vanilla' ) ;
323327 expect ( testComponent . lastEvent . value ) . toBe ( 'vanilla' ) ;
324328 } ) ;
325329 } ) ;
0 commit comments