2017-04-11 78 views
0

假设我有一个具有多个方法创建一个不执行原服务

class OriginalService { 

    method1() { } 
    method2() { } 
    method3() { } 
.. 
} 

的OriginalService的所有方法的模拟,我想创造一个OriginalService模拟,将只与method1使用。

如果我写了下面,打字稿会告诉我方法缺少mockService

let mockService: OriginalService; 
mockService = { 
    method1() { 
    } 

我怎样才能申报mockServiceOriginalService,而无需编写的OriginalService所有属性?

回答

0

扩展OriginalService类:

class MockService extends OriginalService { 
    method1() { 
     // let's override this method! 
    } 
} 

let mockService = new MockService(); 
this.mockService.method1(); 

在这个文件看看:https://www.typescriptlang.org/docs/handbook/classes.html

希望我帮你!上帝的运气和良好的编码!

+0

这是不好的,因为我将实例化实际的服务期望为overident方法。我想用method1实例化一个模拟,没有别的。 – Lev

0

您可能想要另辟蹊径并定义一个仅包含您将要模拟的方法的接口。

interface Service { 
    method1(); 
} 

let realService: Service; 
let mockService: Service; 

realService = new RealService(); 
mockService = { 
    method1() { 
     ... 
    } 
} 

然后,当你调用特定的方法时,你只需要知道它适合接口。

function test(svc: Service) { 
    svc.method1(); 
} 

你甚至可以声明多个接口,每个模拟一个,真正的服务可以实现它们。