我正在编写一个我想测试的离子2应用程序。因此,我需要能够模拟离子本机插件,即我想测试应用程序如何响应网络变化。我尝试导入模块并覆盖其属性:
import {Network, Connection} from 'ionic-native';
Network.connection = Connection.WIFI;
但这不起作用('Cannot set property connection of function Network() { } which has only a getter'
)。有没有可能嘲笑这个?
答案 0 :(得分:1)
正在讨论这个问题here,可能那些使用静态方法的类将被注射服务取代。
答案 1 :(得分:0)
我所做的,并且不知道它是否是一个好方法,是使用Ionic Native对象的实例设置组件的属性,当我测试时,覆盖这个属性有一个模拟。 AppVersion示例:
component.ts
import { AppVersion } from 'ionic-native';
export class YourComponent {
public appVersion: any = AppVersion;
//etc
}
在component.spec.ts
中import { AppVersionMock } from '../../mocks';
describe('YourComponent', () => {
//creates fixtures, get instance, etc...
//in some assertion
it('should have new version number', fakeAsync(() => {
fixture.componentInstance.appVersion = new AppVersionMock()
})
})
和mocks.ts类似
export class AppVersionMock {
version = 20;
public getVersionNumber() {
return new Promise( (resolve, reject) => {
resolve(this.version)
});
}
}