2017-01-19 8 views
0

Я работаю с сторонним модулем в своем проекте ng2. Я хочу, чтобы иметь возможность издеваться этот модуль для тестирования, но модуль сам по себе не получает впрыскивается в мою службу, это просто требуется.Как издеваться над модулем ng2?

Как перезаписать этот Client так, что мой тест не используя фактический модуль?

import {Injectable} from '@angular/core'; 

var Client = require('ssh2').Client; 

@Injectable() 
export class SshService { 

    constructor(){ 
     //Should log "hello world" 
     Client.myFunc(); 
    } 
} 



import { TestBed, inject } from '@angular/core/testing'; 


describe('My Service',() => { 

    beforeEach(() => { 

     TestBed.configureTestingModule({ 
      providers: [ 

       SshService 
      ] 
     }); 

    }); 
    it('should work as expected', 
     inject([SshService], (sshService:SshService) => { 

      sshService.Client = { 
       myFunc:function(){ 
        console.log('hello world') 
       } 
      } 
      console.log(sshService.Client) 
     })); 

}); 

ответ

0

Может быть, оберните модуль 3 участника в службе angular2 и ввести эту услугу в SshService.

+0

Пример, пожалуйста? –

+0

@JustinYoung Та же идея, различная реализация: http://stackoverflow.com/a/37176929/3033053 – silencedmessage

1

Вы не можете напрямую обманывать клиентский модуль для теста, так как он требуется в том же файле. Вы можете обернуть Клиента в отдельный Угловой сервис и ввести его в зависимость:

import { Injectable } from '@angular/core'; 
import { TestBed, inject } from '@angular/core/testing'; 

let Ssh2 = require('ssh2'); 

@Injectable() 
export class Ssh2Client { 
    public client: any = Ssh2.Client; 
} 

@Injectable() 
export class Ssh2ClientMock { 
    // Mock your client here 
    public client: any = { 
     myFunc:() => { 
      console.log('hello world') 
     } 
    }; 
} 

@Injectable() 
export class SshService { 

    constructor(public client: Ssh2Client) { 
     client.myFunc(); 
    } 
} 

describe('My Service',() => { 
    beforeEach(() => { 
     TestBed.configureTestingModule({ 
      providers: [ 
       SshService, 
       { provide: Ssh2Client, useClass: Ssh2ClientMock } 
      ] 
     }); 
    }); 

    it('should work as expected', 
     inject([SshService], (sshService: SshService) => { 
      sshService.client.myFunc() // Should print hello world to console 
     }) 
    ); 
}); 
Смежные вопросы