@@ -1674,25 +1674,6 @@ describe('ngMock', function() {
1674
1674
} ) ;
1675
1675
1676
1676
1677
- describe ( '$rootScope' , function ( ) {
1678
- var destroyed = false ;
1679
- var oldRootScope ;
1680
-
1681
- it ( 'should destroy $rootScope after each test' , inject ( function ( $rootScope ) {
1682
- $rootScope . $on ( '$destroy' , function ( ) {
1683
- destroyed = true ;
1684
- } ) ;
1685
- oldRootScope = $rootScope ;
1686
- } ) ) ;
1687
-
1688
- it ( 'should have destroyed the $rootScope from the previous test' , inject ( function ( $rootScope ) {
1689
- expect ( destroyed ) . toBe ( true ) ;
1690
- expect ( $rootScope ) . not . toBe ( oldRootScope ) ;
1691
- expect ( oldRootScope . $$destroyed ) . toBe ( true ) ;
1692
- } ) ) ;
1693
- } ) ;
1694
-
1695
-
1696
1677
describe ( '$rootScopeDecorator' , function ( ) {
1697
1678
1698
1679
describe ( '$countChildScopes' , function ( ) {
@@ -2418,112 +2399,165 @@ describe('make sure that we can create an injector outside of tests', function()
2418
2399
2419
2400
2420
2401
describe ( '`afterEach` clean-up' , function ( ) {
2421
- describe ( 'undecorated `$rootElement`' , function ( ) {
2422
- var prevRootElement ;
2423
- var prevCleanDataSpy ;
2402
+ describe ( '`$rootElement`' , function ( ) {
2403
+ describe ( 'undecorated' , function ( ) {
2404
+ var prevRootElement ;
2405
+ var prevCleanDataSpy ;
2424
2406
2425
2407
2426
- it ( 'should set up spies so the next test can verify `$rootElement` was cleaned up' , function ( ) {
2427
- module ( function ( $provide ) {
2428
- $provide . decorator ( '$rootElement' , function ( $delegate ) {
2429
- prevRootElement = $delegate ;
2408
+ it ( 'should set up spies for the next test to verify that `$rootElement` was cleaned up' ,
2409
+ function ( ) {
2410
+ module ( function ( $provide ) {
2411
+ $provide . decorator ( '$rootElement' , function ( $delegate ) {
2412
+ prevRootElement = $delegate ;
2430
2413
2431
- // Spy on `angular.element.cleanData()`, so the next test can verify
2432
- // that it has been called as necessary
2433
- prevCleanDataSpy = spyOn ( angular . element , 'cleanData' ) . andCallThrough ( ) ;
2414
+ // Spy on `angular.element.cleanData()`, so the next test can verify
2415
+ // that it has been called as necessary
2416
+ prevCleanDataSpy = spyOn ( angular . element , 'cleanData' ) . andCallThrough ( ) ;
2417
+
2418
+ return $delegate ;
2419
+ } ) ;
2420
+ } ) ;
2421
+
2422
+ // Inject the `$rootElement` to ensure it has been created
2423
+ inject ( function ( $rootElement ) {
2424
+ expect ( $rootElement . injector ( ) ) . toBeDefined ( ) ;
2425
+ } ) ;
2426
+ }
2427
+ ) ;
2434
2428
2435
- return $delegate ;
2436
- } ) ;
2437
- } ) ;
2438
2429
2439
- // Inject the `$rootElement` to ensure it has been created
2440
- inject ( function ( $rootElement ) {
2441
- expect ( $rootElement . injector ( ) ) . toBeDefined ( ) ;
2430
+ it ( 'should clean up `$rootElement` after each test' , function ( ) {
2431
+ // One call is made by `testabilityPatch`'s `dealoc()`
2432
+ // We want to verify the subsequent call, made by `angular-mocks`
2433
+ expect ( prevCleanDataSpy . callCount ) . toBe ( 2 ) ;
2434
+
2435
+ var cleanUpNodes = prevCleanDataSpy . calls [ 1 ] . args [ 0 ] ;
2436
+ expect ( cleanUpNodes . length ) . toBe ( 1 ) ;
2437
+ expect ( cleanUpNodes [ 0 ] ) . toBe ( prevRootElement [ 0 ] ) ;
2442
2438
} ) ;
2443
2439
} ) ;
2444
2440
2445
2441
2446
- it ( 'should clean up `$rootElement` after each test ', function ( ) {
2447
- // One call is made by `testabilityPatch`'s `dealoc()`
2448
- // We want to verify the subsequent call, made by `angular-mocks`
2449
- expect ( prevCleanDataSpy . callCount ) . toBe ( 2 ) ;
2442
+ describe ( 'decorated ', function ( ) {
2443
+ var prevOriginalRootElement ;
2444
+ var prevRootElement ;
2445
+ var prevCleanDataSpy ;
2450
2446
2451
- var cleanUpNodes = prevCleanDataSpy . calls [ 1 ] . args [ 0 ] ;
2452
- expect ( cleanUpNodes . length ) . toBe ( 1 ) ;
2453
- expect ( cleanUpNodes [ 0 ] ) . toBe ( prevRootElement [ 0 ] ) ;
2454
- } ) ;
2455
- } ) ;
2456
2447
2448
+ it ( 'should set up spies for the next text to verify that `$rootElement` was cleaned up' ,
2449
+ function ( ) {
2450
+ module ( function ( $provide ) {
2451
+ $provide . decorator ( '$rootElement' , function ( $delegate ) {
2452
+ prevOriginalRootElement = $delegate ;
2457
2453
2458
- describe ( 'decorated `$rootElement`' , function ( ) {
2459
- var prevOriginalRootElement ;
2460
- var prevRootElement ;
2461
- var prevCleanDataSpy ;
2454
+ // Mock `$rootElement` to be able to verify that the correct object is cleaned up
2455
+ prevRootElement = angular . element ( '<div></div>' ) ;
2462
2456
2457
+ // Spy on `angular.element.cleanData()`, so the next test can verify
2458
+ // that it has been called as necessary
2459
+ prevCleanDataSpy = spyOn ( angular . element , 'cleanData' ) . andCallThrough ( ) ;
2463
2460
2464
- it ( 'should set up spies so the next text can verify `$rootElement` was cleaned up' , function ( ) {
2465
- module ( function ( $provide ) {
2466
- $provide . decorator ( '$rootElement' , function ( $delegate ) {
2467
- prevOriginalRootElement = $delegate ;
2461
+ return prevRootElement ;
2462
+ } ) ;
2463
+ } ) ;
2468
2464
2469
- // Mock `$rootElement` to be able to verify that the correct object is cleaned up
2470
- prevRootElement = angular . element ( '<div></div>' ) ;
2465
+ // Inject the `$rootElement` to ensure it has been created
2466
+ inject ( function ( $rootElement ) {
2467
+ expect ( $rootElement ) . toBe ( prevRootElement ) ;
2468
+ expect ( prevOriginalRootElement . injector ( ) ) . toBeDefined ( ) ;
2469
+ expect ( prevRootElement . injector ( ) ) . toBeUndefined ( ) ;
2470
+
2471
+ // If we don't clean up `prevOriginalRootElement`-related data now, `testabilityPatch` will
2472
+ // complain about a memory leak, because it doesn't clean up after the original
2473
+ // `$rootElement`
2474
+ // This is a false alarm, because `angular-mocks` would have cleaned up in a subsequent
2475
+ // `afterEach` block
2476
+ prevOriginalRootElement . removeData ( ) ;
2477
+ } ) ;
2478
+ }
2479
+ ) ;
2471
2480
2472
- // Spy on `angular.element.cleanData()`, so the next test can verify
2473
- // that it has been called as necessary
2474
- prevCleanDataSpy = spyOn ( angular . element , 'cleanData' ) . andCallThrough ( ) ;
2475
2481
2476
- return prevRootElement ;
2477
- } ) ;
2478
- } ) ;
2482
+ it ( 'should clean up `$rootElement` (both original and decorated) after each test' ,
2483
+ function ( ) {
2484
+ // One call is made by `testabilityPatch`'s `dealoc()`
2485
+ // We want to verify the subsequent call, made by `angular-mocks`
2486
+ expect ( prevCleanDataSpy . callCount ) . toBe ( 2 ) ;
2487
+
2488
+ var cleanUpNodes = prevCleanDataSpy . calls [ 1 ] . args [ 0 ] ;
2489
+ expect ( cleanUpNodes . length ) . toBe ( 2 ) ;
2490
+ expect ( cleanUpNodes [ 0 ] ) . toBe ( prevOriginalRootElement [ 0 ] ) ;
2491
+ expect ( cleanUpNodes [ 1 ] ) . toBe ( prevRootElement [ 0 ] ) ;
2492
+ }
2493
+ ) ;
2494
+ } ) ;
2479
2495
2480
- // Inject the `$rootElement` to ensure it has been created
2481
- inject ( function ( $rootElement ) {
2482
- expect ( $rootElement ) . toBe ( prevRootElement ) ;
2483
- expect ( prevOriginalRootElement . injector ( ) ) . toBeDefined ( ) ;
2484
- expect ( prevRootElement . injector ( ) ) . toBeUndefined ( ) ;
2485
2496
2486
- // If we don't clean up `prevOriginalRootElement`-related data now, `testabilityPatch` will
2487
- // complain about a memory leak, because it doesn't clean up after the original
2488
- // `$rootElement`
2489
- // This is a false alarm, because `angular-mocks` would have cleaned up in a subsequent
2490
- // `afterEach` block
2491
- prevOriginalRootElement . removeData ( ) ;
2497
+ describe ( 'uninstantiated or falsy' , function ( ) {
2498
+ it ( 'should not break if `$rootElement` was never instantiated' , function ( ) {
2499
+ // Just an empty test to verify that `angular-mocks` doesn't break,
2500
+ // when trying to clean up `$rootElement`, if `$rootElement` was never injected in the test
2501
+ // (and thus never instantiated/created)
2502
+
2503
+ // Ensure the `$injector` is created - if there is no `$injector`, no clean-up takes places
2504
+ inject ( function ( ) { } ) ;
2492
2505
} ) ;
2493
- } ) ;
2494
2506
2495
2507
2496
- it ( 'should clean up `$rootElement` (both original and decorated) after each test' , function ( ) {
2497
- // One call is made by `testabilityPatch`'s `dealoc()`
2498
- // We want to verify the subsequent call, made by `angular-mocks`
2499
- expect ( prevCleanDataSpy . callCount ) . toBe ( 2 ) ;
2508
+ it ( 'should not break if the decorated `$rootElement` is falsy (e.g. `null`)' , function ( ) {
2509
+ module ( { $rootElement : null } ) ;
2500
2510
2501
- var cleanUpNodes = prevCleanDataSpy . calls [ 1 ] . args [ 0 ] ;
2502
- expect ( cleanUpNodes . length ) . toBe ( 2 ) ;
2503
- expect ( cleanUpNodes [ 0 ] ) . toBe ( prevOriginalRootElement [ 0 ] ) ;
2504
- expect ( cleanUpNodes [ 1 ] ) . toBe ( prevRootElement [ 0 ] ) ;
2511
+ // Ensure the `$injector` is created - if there is no `$injector`, no clean-up takes places
2512
+ inject ( function ( ) { } ) ;
2513
+ } ) ;
2505
2514
} ) ;
2506
2515
} ) ;
2507
2516
2508
2517
2509
- describe ( 'uninstantiated or falsy `$rootElement`' , function ( ) {
2510
- it ( 'should not break if `$rootElement` was never instantiated' , function ( ) {
2511
- // Just an empty test to verify that `angular-mocks` doesn't break,
2512
- // when trying to clean up `$rootElement`, if `$rootElement` was never injected in the test
2513
- // (and thus never instantiated/created)
2518
+ describe ( '`$rootScope`' , function ( ) {
2519
+ describe ( 'undecorated' , function ( ) {
2520
+ var prevRootScope ;
2521
+ var prevDestroySpy ;
2514
2522
2515
- // Ensure the `$injector` is created - if there is no `$injector`, no clean-up takes places
2516
- inject ( function ( ) { } ) ;
2523
+
2524
+ it ( 'should set up spies for the next test to verify that `$rootScope` was cleaned up' ,
2525
+ inject ( function ( $rootScope ) {
2526
+ prevRootScope = $rootScope ;
2527
+ prevDestroySpy = spyOn ( $rootScope , '$destroy' ) . andCallThrough ( ) ;
2528
+ } )
2529
+ ) ;
2530
+
2531
+
2532
+ it ( 'should clean up `$rootScope` after each test' , inject ( function ( $rootScope ) {
2533
+ expect ( $rootScope ) . not . toBe ( prevRootScope ) ;
2534
+ expect ( prevDestroySpy ) . toHaveBeenCalledOnce ( ) ;
2535
+ expect ( prevRootScope . $$destroyed ) . toBe ( true ) ;
2536
+ } ) ) ;
2517
2537
} ) ;
2518
2538
2519
2539
2520
- it ( 'should not break if the decorated `$rootElement` is falsy (e.g. `null`)' , function ( ) {
2521
- module ( function ( $provide ) {
2522
- $provide . value ( '$rootElement' , null ) ;
2540
+ describe ( 'falsy or without `$destroy()` method' , function ( ) {
2541
+ it ( 'should not break if `$rootScope` is falsy (e.g. `null`)' , function ( ) {
2542
+ // Just an empty test to verify that `angular-mocks` doesn't break,
2543
+ // when trying to clean up a mocked `$rootScope` set to `null`
2544
+
2545
+ module ( { $rootScope : null } ) ;
2546
+
2547
+ // Ensure the `$injector` is created - if there is no `$injector`, no clean-up takes places
2548
+ inject ( function ( ) { } ) ;
2523
2549
} ) ;
2524
2550
2525
- // Ensure the `$injector` is created - if there is no `$injector`, no clean-up takes places
2526
- inject ( function ( ) { } ) ;
2551
+
2552
+ it ( 'should not break if `$rootScope.$destroy` is not a function' , function ( ) {
2553
+ // Just an empty test to verify that `angular-mocks` doesn't break,
2554
+ // when trying to clean up a mocked `$rootScope` without a `$destroy()` method
2555
+
2556
+ module ( { $rootScope : { } } ) ;
2557
+
2558
+ // Ensure the `$injector` is created - if there is no `$injector`, no clean-up takes places
2559
+ inject ( function ( ) { } ) ;
2560
+ } ) ;
2527
2561
} ) ;
2528
2562
} ) ;
2529
2563
} ) ;
0 commit comments