Some cases will still need to use `spy as any` cast, because `@types/jasmine` have some issues, 1. The issue jasmine doesn't handle optional method properties, https://github.com/DefinitelyTyped/DefinitelyTyped/issues/43486 2. The issue jasmine doesn't handle overload method correctly, https://github.com/DefinitelyTyped/DefinitelyTyped/issues/42455 PR Close #34625
		
			
				
	
	
		
			68 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
/**
 | 
						|
 * @license
 | 
						|
 * Copyright Google Inc. All Rights Reserved.
 | 
						|
 *
 | 
						|
 * Use of this source code is governed by an MIT-style license that can be
 | 
						|
 * found in the LICENSE file at https://angular.io/license
 | 
						|
 */
 | 
						|
describe('crypto test', () => {
 | 
						|
  let crypto: any = null;
 | 
						|
 | 
						|
  try {
 | 
						|
    crypto = require('crypto');
 | 
						|
  } catch (err) {
 | 
						|
  }
 | 
						|
 | 
						|
  it('crypto randomBytes method should be patched as tasks', (done) => {
 | 
						|
    if (!crypto) {
 | 
						|
      done();
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    const zoneASpec = {
 | 
						|
      name: 'A',
 | 
						|
      onScheduleTask: (delegate: ZoneDelegate, currentZone: Zone, targetZone: Zone, task: Task):
 | 
						|
          Task => {
 | 
						|
            return delegate.scheduleTask(targetZone, task);
 | 
						|
          }
 | 
						|
    };
 | 
						|
    const zoneA = Zone.current.fork(zoneASpec);
 | 
						|
    spyOn(zoneASpec, 'onScheduleTask').and.callThrough();
 | 
						|
    zoneA.run(() => {
 | 
						|
      crypto.randomBytes(256, (err: Error, buf: any) => {
 | 
						|
        expect(err).toBeFalsy();
 | 
						|
        expect(zoneASpec.onScheduleTask).toHaveBeenCalled();
 | 
						|
        expect(buf.length).toBe(256);
 | 
						|
        expect(Zone.current.name).toEqual('A');
 | 
						|
        done();
 | 
						|
      });
 | 
						|
    });
 | 
						|
  });
 | 
						|
 | 
						|
  it('crypto pbkdf2 method should be patched as tasks', (done) => {
 | 
						|
    if (!crypto) {
 | 
						|
      done();
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    const zoneASpec = {
 | 
						|
      name: 'A',
 | 
						|
      onScheduleTask: (delegate: ZoneDelegate, currentZone: Zone, targetZone: Zone, task: Task):
 | 
						|
          Task => {
 | 
						|
            return delegate.scheduleTask(targetZone, task);
 | 
						|
          }
 | 
						|
    };
 | 
						|
    const zoneA = Zone.current.fork(zoneASpec);
 | 
						|
    spyOn(zoneASpec, 'onScheduleTask').and.callThrough();
 | 
						|
    zoneA.run(() => {
 | 
						|
      crypto.pbkdf2('secret', 'salt', 100000, 512, 'sha512', (err: Error, key: any) => {
 | 
						|
        expect(err).toBeFalsy();
 | 
						|
        expect(zoneASpec.onScheduleTask).toHaveBeenCalled();
 | 
						|
        expect(key.toString('hex'))
 | 
						|
            .toEqual(
 | 
						|
                '3745e482c6e0ade35da10139e797157f4a5da669dad7d5da88ef87e47471cc47ed941c7ad618e827304f083f8707f12b7cfdd5f489b782f10cc269e3c08d59ae04919ee902c99dba309cde75569fbe8e6d5c341d6f2576f6618c589e77911a261ee964e242797e64aeca9a134de5ced37fe2521d35d87303edb55a844c8cf11e3b42b18dbd7add0739ea9b172dc3810f911396fa3956f499415db35b79488d74926cdc0c15c3910bf2e4918f5a8efd7de3d4c314bace50c7a95150339eccd32dda2e15d961ea2c91eddd8b03110135a72b3562f189c2d15568854f9a1844cfa62fb77214f2810a2277fd21be95a794cde78e0fe5267a2c1b0894c7729fc4be378156aeb1cff8a215bb4df12312ba676fe2f270dfc3e2b54d8f9c74dfb531530042a09b226fafbcef45368a1ec75f9224a80f2280f75258ff74a2b9a864d857ede49af6a23af837a1f502a6c32e3537402280bef200d847d8fee42649e6d9a00df952ab2fbefc84ba8927f73137fdfbea81f86088edd4cf329edf3f6982429797143cbd43128777c2da269fadd55d18c7921308c7ad7a5bb85ef8d614e2e8461ea3b7fc2edcf72b85da6828a4198c46000953afb1f3a19ecac0df0d660848a0f89ed3d0e0a82115347c9918bdf16fad479c1de16a6b9798437622acff245e6cf80c9ee9d56cada8523ebb6ff348c73c836e5828761f8dda1dd5ab1633caa39b34');
 | 
						|
        expect(Zone.current.name).toEqual('A');
 | 
						|
        done();
 | 
						|
      });
 | 
						|
    });
 | 
						|
  });
 | 
						|
});
 |