模仿离子原生物进行测试

时间:2016-07-20 05:42:29

标签: unit-testing ionic-framework ionic2

我正在编写一个我想测试的离子2应用程序。因此,我需要能够模拟离子本机插件,即我想测试应用程序如何响应网络变化。我尝试导入模块并覆盖其属性:

import {Network, Connection} from 'ionic-native';
Network.connection = Connection.WIFI;

但这不起作用('Cannot set property connection of function Network() { } which has only a getter')。有没有可能嘲笑这个?

2 个答案:

答案 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)
    });
  }
}