加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

单元测试 – Ionic 2 ViewController单元测试

发布时间:2020-12-17 18:02:06 所属栏目:安全 来源:网络整理
导读:我已经进行了以下单元测试,测试我用Ionic 2编写的组件.单元测试给出了一个Ionic库的错误,我认为我没有正确地嘲笑它或者这样 import { ComponentFixture,async } from '@angular/core/testing';import { TestUtils } from '../../test';import {} from 'jasmi
我已经进行了以下单元测试,测试我用Ionic 2编写的组件.单元测试给出了一个Ionic库的错误,我认为我没有正确地嘲笑它或者这样

import { ComponentFixture,async } from '@angular/core/testing';
import { TestUtils }               from '../../test';
import {} from 'jasmine';

import { LocationSearchModal } from './LocationSearchModal';
import { LocationService } from '../../services/LocationService';
import { PouchDbService } from '../../services/common/PouchDbService';

import { FormsModule,ReactiveFormsModule } from '@angular/forms';
import { TestBed } from '@angular/core/testing';
import { App,MenuController,NavController,Platform,Config,Keyboard,Form,IonicModule,ViewController,GestureController,NavParams }  from 'ionic-angular';
import { ConfigMock } from '../../mocks';
import { TranslateModule } from 'ng2-translate';
import { LoadingController } from 'ionic-angular';

let fixture: ComponentFixture<LocationSearchModal> = null;
let instance: any = null;

describe('LocationSearchModal',() => {
  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [
        LocationSearchModal
      ],providers: [
        App,LocationService,LoadingController,{ provide: ViewController,useClass: class { ViewController = jasmine.createSpy("viewController"); } },{ provide: NavParams,useClass: class { NavParams = jasmine.createSpy("navParams"); } },{ provide: PouchDbService,useClass: class { PouchDbService = jasmine.createSpy("pouchDbService"); } },{provide: Config,useClass: ConfigMock}
      ],imports: [
        FormsModule,ReactiveFormsModule,TranslateModule.forRoot(),],})
    .compileComponents()
    .then(() => {
      fixture = TestBed.createComponent(LocationSearchModal);
      instance = fixture.debugElement.componentInstance;
      fixture.autoDetectChanges(true);
    });
  }));

  afterEach(() => {
    fixture.destroy();
  });

  it('loads',() => {
    expect(fixture).not.toBeNull();
    expect(instance).not.toBeNull();
  })
})

这是使用正在测试的组件中的ViewController的相关摘录.

this.locationService.getLocationById(this.selectedLocation)
      .subscribe((location: any) => {
        this.viewController.dismiss(location.doc)
      });

测试失败,我得到以下堆栈跟踪

Chrome 53.0.2785 (Linux 0.0.0)
TypeError: viewCtrl._setHeader is not a function
    at new Header (webpack:///home/milinda/workspaces/eclipse/inspection/addedinspection/Inspection-Upgrade/~/ionic-angular/components/toolbar/toolbar.js:14:0 <- src/test.ts:11833:30)
    at new Wrapper_Header (/IonicModule/Header/wrapper.ngfactory.js:7:18)

这与我创建了jasmine间谍的ViewController行有关

{provide:ViewController,useClass:class {ViewController = jasmine.createSpy(“viewController”); },

看了一下代码库后,我在这里找到了_setHeader方法

https://github.com/driftyco/ionic/blob/6b3e2ed447340cdd35c328c96aa7cfa5f34eb214/src/navigation/view-controller.ts#L364

我也尝试过编写自定义提供程序,但也得到了相同的错误.任何关于测试ViewController的正确方法的想法.

另外,有时在解决ViewController问题之后,NavParams可能会出现问题

解决方法

以Marky Sparky的答案为基础.离子3:

export class ViewControllerMock{
  readReady = {
    subscribe(){

    }
  };
  writeReady = {
    subscribe(){

    }
  };

  dismiss(){
    console.log('View Controller Dismiss Called');
  }
  _setHeader(){

  }
  _setNavbar(){

  }
  _setIONContent(){

  }
  _setIONContentRef(){

  }
}

在版本上工作:

Cordova CLI: 6.5.0 
Ionic Framework Version: 3.0.1
Ionic CLI Version: 3.0.0-beta7
ios-deploy version: 1.9.1 
ios-sim version: Not installed
OS: macOS Sierra
Node Version: v7.8.0
Xcode version: Xcode 8.3.2 Build version 8E2002

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读