【问题标题】:Ionic testing Slides, Cannot read property 'subscribe' of undefined at initEvents离子测试幻灯片,无法读取 initEvents 未定义的属性“订阅”
【发布时间】:2017-04-26 22:56:29
【问题描述】:

使用 Ionic 3,使用 ion-slides,您可能会遇到以下错误:

Failed: Cannot read property 'subscribe' of undefined
    TypeError: Cannot read property 'subscribe' of undefined
        at initEvents (http://localhost:9877webpack:///~/ionic-angular/components/slides/swiper/swiper-events.js:63:0 <- src/test.ts:128385:48)
        at Slides._initSlides (http://localhost:9877webpack:///~/ionic-angular/components/slides/slides.js:815:0 <- src/test.ts:61766:127)
        at SafeSubscriber._next (http://localhost:9877webpack:///~/ionic-angular/components/slides/slides.js:530:0 <- src/test.ts:61481:23)
        at SafeSubscriber.__tryOrUnsub (http://localhost:9877webpack:///~/rxjs/Subscriber.js:234:0 <- src/test.ts:17652:16)
        at SafeSubscriber.next (http://localhost:9877webpack:///~/rxjs/Subscriber.js:183:0 <- src/test.ts:17601:22)
        at Subscriber._next (http://localhost:9877webpack:///~/rxjs/Subscriber.js:125:0 <- src/test.ts:17543:26)
        at Subscriber.next (http://localhost:9877webpack:///~/rxjs/Subscriber.js:89:0 <- src/test.ts:17507:18)
        at http://localhost:9877webpack:///~/rxjs/observable/PromiseObservable.js:66:0 <- src/test.ts:115833:36
        at ZoneDelegate.invoke (http://localhost:9877webpack:///~/zone.js/dist/zone.js:365:0 <- src/polyfills.ts:1520:26)
        at AsyncTestZoneSpec.onInvoke (http://localhost:9877webpack:///~/zone.js/dist/async-test.js:49:0 <- src/test.ts:118535:39)
        at ProxyZoneSpec.onInvoke (http://localhost:9877webpack:///~/zone.js/dist/proxy.js:76:0 <- src/test.ts:119221:39)
        at ZoneDelegate.invoke (http://localhost:9877webpack:///~/zone.js/dist/zone.js:364:0 <- src/polyfills.ts:1519:32)
        at Object.onInvoke (http://localhost:9877webpack:///~/@angular/core/@angular/core.es5.js:4145:0 <- src/test.ts:6663:37)
        at ZoneDelegate.invoke (http://localhost:9877webpack:///~/zone.js/dist/zone.js:364:0 <- src/polyfills.ts:1519:32)
        at Zone.run (http://localhost:9877webpack:///~/zone.js/dist/zone.js:125:0 <- src/polyfills.ts:1280:43)

此错误是由订阅 platform.resize 的行引起的,在 ionic repo 上可以看到:https://github.com/driftyco/ionic/blob/e1913211930a53e77a4d18b70f673fea9799be75/src/components/slides/swiper/swiper-events.ts#L87

【问题讨论】:

    标签: ionic-framework ionic2


    【解决方案1】:

    您需要做的是将此添加到您的 Platform mock,这样 Observable 就不会将 subscribe 添加到您的模拟中未定义的内容中。

      get resize(): Observable<any> {
        return Observable.of(true);
      }
    

    这也是我完整的 Platform Mock,以防万一有人需要。

    import { Observable } from 'rxjs/Observable'
    
    export class PlatformMock {
      public ready(): Promise<{String}> {
        return new Promise((resolve) => {
          resolve('READY');
        });
      }
    
      public registerBackButtonAction(fn: Function, priority?: number): Function {
        return (() => true);
      }
    
      public hasFocus(ele: HTMLElement): boolean {
        return true;
      }
    
      public doc(): HTMLDocument {
        return document;
      }
    
      public is(): boolean {
        return true;
      }
    
      public getElementComputedStyle(container: any): any {
        return {
          paddingLeft: '10',
          paddingTop: '10',
          paddingRight: '10',
          paddingBottom: '10',
        };
      }
    
      public onResize(callback: any) {
        return callback;
      }
    
      get resize(): Observable<any> {
        return Observable.of(true);
      }
    
      public registerListener(ele: any, eventName: string, callback: any): Function {
        return (() => true);
      }
    
      public win(): Window {
        return window;
      }
    
      public raf(callback: any): number {
        return 1;
      }
    
      public timeout(callback: any, timer: number): any {
        return setTimeout(callback, timer);
      }
    
      public cancelTimeout(id: any) {
        // do nothing
      }
    
      public getActiveElement(): any {
        return document['activeElement'];
      }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-23
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-07
      相关资源
      最近更新 更多