2017-07-20 24 views
0

我有一个依赖于多个提供者的angular2组件。从我目前阅读的内容来模拟提供商,我有两种选择Angular2提供程序自动在每个提供者中模拟方法

  1. 为每个提供商编写模拟服务。
  2. 使用间谍和模拟只有组件调用的方法。

如果我选择了选项1,那么我必须写很多虚拟代码,这是浪费空间。如果我停止选择2,那么我需要了解每个提供者是什么,然后只写模拟方法。我想要做的是在所有提供者中自动模拟所有方法,然后只在需要时编写间谍(自定义模拟逻辑)。我该怎么做呢?

例如我怎么会自动嘲笑以下服务

public class ActualService(){ 
    public getUsers(){ 
    //Actual call 
    } 

    public udpateUser(user:User){ 
    //Actual call to be backend to update the user 
    } 
} 

我怎么自动模拟一切都在这个使用类似兴农库什么都不做?或其他东西

回答

0

快捷方式在单元测试中是不可接受的,因为这会导致低质量的测试,当它们失败时它们应该并且难以调试时不会失败。

最好的方法是创建一个新的存根/模拟对象,该对象只有受当前测试影响的方法。当测试代码更改为引入测试中未考虑的方法时,这将导致测试失败,并显示明确的错误消息。

尽管描述的缺点,它可能与兴农做到这一点:

const serviceStub = sinon.createStubInstance(Service); 

或者茉莉:

const serviceStub = jasmine.createSpyObj('Service', 
    Service.prototype.getOwnPropertyNames 
    .filter(prop => typeof Service.prototype[prop] === 'function') 
); 

... 
providers: [{ provide: Service, useValue: serviceStub }] 
...