raj*_*raj 1 unit-testing jasmine ionic-framework angular
我有一个我想测试的角度2服务功能。
service.ts
upload(){
let file = new Transfer();
file.upload(myfile).then( // my callback );
}
Run Code Online (Sandbox Code Playgroud)
我想Transfer使用进行模拟测试jasmine。我在我的尝试
sevice.spec.ts
import { TransferMock as Transfer } from '../mocks/mocks'嘲笑它。但这不起作用。这就是实例化我的测试的方式。
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
});
})
Run Code Online (Sandbox Code Playgroud)
编辑
Transfer没有注入服务。仅使用一种功能Transfer。因此,我认为不注入可以减少应用程序的初始加载时间(很高兴知道其他观点)。因此,我想知道是否可以通过这种方式来模拟它?
编辑
尽管我已经接受了Martin的回答,因为这是最佳实践,但是使用ionic-native插件时可能会发生一个问题。如果插件不具有浏览器支持,它可能会失败。在这种情况下,当我注入它时发生了错误FileTransfer is not defined。所以我又回来了,寻求建议。
为了在测试中为类提供模拟,您需要在实现中注入该类。
在您的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 ]
Run Code Online (Sandbox Code Playgroud)
NativeTransfer可以是一个简单的存根,它只能执行任何操作,但可以防止错误,或者可以让用户知道其浏览器不支持此功能。
| 归档时间: |
|
| 查看次数: |
874 次 |
| 最近记录: |