首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在角2测试中伪造模块

在角2测试中伪造模块
EN

Stack Overflow用户
提问于 2017-01-23 06:56:25
回答 1查看 1.3K关注 0票数 1

我有一个功能的角2服务,我想测试。

service.ts

代码语言:javascript
复制
upload(){
  let file = new Transfer();
  file.upload(myfile).then( // my callback );
}

我想在我的测试中使用Transfer来模拟jasmine。我在我的

sevice.spec.ts

import { TransferMock as Transfer } from '../mocks/mocks'来嘲笑它。但这是行不通的。这就是如何实例化我的测试。

代码语言:javascript
复制
describe('authentication service' , () => {
  beforeEach(() => {
    auth = new Service(<any>new HttpMock(), <any>new StorageMock())
  });
  it('initialize authentication',() => {
    expect(auth).not.toEqual(null);
    auth.upload('file'); //it fails here
  });
})

编辑

服务中没有注入Transfer 只有一个函数使用Transfer。因此,不注入可以缩短应用程序的初始加载时间,我想(很高兴知道其他意见)。所以我想知道,如果它的构造是这样的话,是否还有什么可以模仿的呢?

编辑

虽然我已经接受了马丁的答案,因为它是最好的实践,但它有一个问题,当你使用ionic-native plugins.If插件没有浏览器支持,它可能会失败。在这种情况下,当我使用错误FileTransfer is not defined注入它时,就发生了这种情况。所以我又回来了,寻找建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-23 07:28:39

为了在测试中为类提供模拟,需要在实现中注入类。

在您的ngModule中,向提供程序添加传输。然后简单地将它注入您的服务。

然后,在测试中,您可以在{ provide: Transfer, useClass: TransferMock }提供程序中使用TestBed

更新

依赖注入的主要目的是使代码具有可测试性,并允许对服务进行模拟-伪装-固执。

更新

使用依赖注入,您可以为不同的环境配置不同的提供程序集。

例如,如果在浏览器中运行应用程序,在本地移动环境中可以交换配置。

在您的模块中可以有这样的内容:

代码语言:javascript
复制
const TRANSFER_PROVIDER: any;

if (environment.browser) {
  TRANSFER_PROVIDER = Transfer;
} else {
  TRANSFER_PROVIDER = { provide: Transfer, useClass: NativeTransfer }
}

...
providers: [ TRANSFER_PROVIDER ]

NativeTransfer可以是一个简单的存根,只会防止错误,或者它可以让用户知道他们的浏览器不支持这个特性。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41800772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档