2016-07-20 17 views
2

Ich schreibe eine ionic 2 App, die ich testen möchte. Daher brauche ich die Fähigkeit, ionische native Plugins nachzuahmen, d. H. Ich möchte testen, wie die Anwendung auf Netzwerkänderungen reagiert. Ich habe versucht, die Module zu importieren und seine Eigenschaften außer Kraft setzen:Mock ionic-native zum Testen

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

aber das funktioniert nicht ('Cannot set property connection of function Network() { } which has only a getter'). Gibt es eine Möglichkeit, das zu verspotten?

Antwort

1

Diese Angelegenheit wird diskutiert here, und wahrscheinlich werden diese Klassen mit statischen Methoden durch injizierbare Dienste ersetzt werden.

0

Was ich getan habe und nicht weiß, ob es ein guter Ansatz ist, ist eine Eigenschaft der Komponente mit der Instanz des Ionic Native's Objekts zu setzen und diese Eigenschaft beim Test mit einem Mock zu überschreiben. Beispiel mit AppVersion:

component.ts

import { AppVersion } from 'ionic-native'; 
export class YourComponent { 
    public appVersion: any = AppVersion; 
    //etc 
} 

in den 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() 
    }) 
}) 

und mocks.ts etwas wie

export class AppVersionMock { 
    version = 20; 
    public getVersionNumber() { 
    return new Promise((resolve, reject) => { 
     resolve(this.version) 
    }); 
    } 
}