当前位置:  开发笔记 > 编程语言 > 正文

在Angle 2测试中伪造模块

如何解决《在Angle2测试中伪造模块》经验,为你挑选了1个好方法。

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

service.ts

upload(){
  let file = new Transfer();
  file.upload(myfile).then( // my callback );
}

我想Transfer使用进行模拟测试jasmine。我在我的尝试

sevice.spec.ts

import { TransferMock as Transfer } from '../mocks/mocks'嘲笑它。但这不起作用。这就是实例化我的测试的方式。

describe('authentication service' , () => {
  beforeEach(() => {
    auth = new Service(new HttpMock(), new StorageMock())
  });
  it('initialize authentication',() => {
    expect(auth).not.toEqual(null);
    auth.upload('file'); //it fails here
  });
})

编辑

Transfer没有注入服务。仅使用一种功能Transfer。因此,我认为不注入可以减少应用程序的初始加载时间(很高兴知道其他观点)。因此,我想知道是否可以通过这种方式来模拟它?

编辑

尽管我已经接受了Martin的回答,因为这是最佳实践,但是使用ionic-native插件时可能会发生一个问题。如果插件不具有浏览器支持,它可能会失败。在这种情况下,当我注入它时发生了错误FileTransfer is not defined。所以我又回来了,寻求建议。



1> Martin..:

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

在您的ngModule转移到您的提供程序中。然后只需将其注入您的服务即可。

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

更新资料

依赖注入的主要目的是使代码可测试,并允许模拟(假冒)服务存根。

更新资料

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

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

在您的模块中,您可能会遇到以下情况:

const TRANSFER_PROVIDER: any;

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

...
providers: [ TRANSFER_PROVIDER ]

NativeTransfer可以是一个简单的存根,它只能执行任何操作,但可以防止错误,或者可以让用户知道其浏览器不支持此功能。

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有