<bdo id='AFGPF'></bdo><ul id='AFGPF'></ul>
<legend id='AFGPF'><style id='AFGPF'><dir id='AFGPF'><q id='AFGPF'></q></dir></style></legend>

        <tfoot id='AFGPF'></tfoot>
        <i id='AFGPF'><tr id='AFGPF'><dt id='AFGPF'><q id='AFGPF'><span id='AFGPF'><b id='AFGPF'><form id='AFGPF'><ins id='AFGPF'></ins><ul id='AFGPF'></ul><sub id='AFGPF'></sub></form><legend id='AFGPF'></legend><bdo id='AFGPF'><pre id='AFGPF'><center id='AFGPF'></center></pre></bdo></b><th id='AFGPF'></th></span></q></dt></tr></i><div id='AFGPF'><tfoot id='AFGPF'></tfoot><dl id='AFGPF'><fieldset id='AFGPF'></fieldset></dl></div>
      1. <small id='AFGPF'></small><noframes id='AFGPF'>

      2. 无法读取离子 2 单元测试中未定义的属性“_get

        时间:2023-09-08

        <tfoot id='jhedF'></tfoot>

        • <bdo id='jhedF'></bdo><ul id='jhedF'></ul>

            <small id='jhedF'></small><noframes id='jhedF'>

              <tbody id='jhedF'></tbody>

          • <legend id='jhedF'><style id='jhedF'><dir id='jhedF'><q id='jhedF'></q></dir></style></legend>
            1. <i id='jhedF'><tr id='jhedF'><dt id='jhedF'><q id='jhedF'><span id='jhedF'><b id='jhedF'><form id='jhedF'><ins id='jhedF'></ins><ul id='jhedF'></ul><sub id='jhedF'></sub></form><legend id='jhedF'></legend><bdo id='jhedF'><pre id='jhedF'><center id='jhedF'></center></pre></bdo></b><th id='jhedF'></th></span></q></dt></tr></i><div id='jhedF'><tfoot id='jhedF'></tfoot><dl id='jhedF'><fieldset id='jhedF'></fieldset></dl></div>

                  本文介绍了无法读取离子 2 单元测试中未定义的属性“_getPortal"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  我是 ionic 2 单元测试的初学者.我遵循了 Angular 2 文档(https://angular.io/docs/ts/latest/guide/testing.html) 用 karma 和 jasmine 测试我的 ionic 2 应用程序.

                  I am a beginner to ionic 2 unit testing. I followed angular 2 documentation (https://angular.io/docs/ts/latest/guide/testing.html) to test my ionic 2 application with karma and jasmine.

                  但现在我陷入了一个名为

                  But now I am stuck in an error called

                  '无法读取未定义的属性'_getPortal'

                  'Cannot read property '_getPortal' of undefined'

                  这是我的 LocationSearchModal.ts 文件

                  import { Component } from '@angular/core';
                  import { NavController, ViewController } from 'ionic-angular';
                  import { Location } from '../../services/domain/Location';
                  import { LocationService } from '../../services/LocationService';
                  import { LoadingController } from 'ionic-angular';
                  
                  @Component({
                    selector: 'location-search-modal',
                    templateUrl: 'location-search-modal.html'
                  })
                  export class LocationSearchModal {
                    locationList: Array<Location> = new Array<Location>();
                    selectedLocation: number;
                    temp: any = "test";
                  
                    constructor(public navCtrl: NavController, public locationService: LocationService, public viewController: ViewController, public loadingController: LoadingController) {
                      this.filterLocationsForString();
                    }
                  
                    filterLocations(event: any): void {
                      const searchString: string = event.target.value;
                      this.filterLocationsForString(searchString);
                      console.log(this.filterLocationsForString(searchString));
                    }
                  
                    filterLocationsForString(searchString?: string) {
                      let loader = this.loadingController.create({
                        content: "loading"
                      });
                      loader.present();
                      this.locationService.getLocationsForLikeSearchString(searchString)
                        .subscribe((result) => {
                          loader.dismissAll();
                          this.locationList = result
                        });
                      console.log(this.locationList);
                    }
                  
                    closeLocationSearch() {
                      this.locationService.getLocationById(this.selectedLocation)
                        .subscribe((location) => this.viewController.dismiss(location[0]));
                    }
                  
                  }
                  

                  我在那里使用了名为 locationService.ts 的服务,这就是该服务

                  and I used service called locationService.ts there and this is that service

                  import { Injectable } from '@angular/core';
                  import { Location } from './domain/Location';
                  
                  import { DatabaseAccessor } from  '../database/DatabaseAccessor';
                  import { Observable } from 'rxjs/Rx';
                  
                  @Injectable()
                  export class LocationService {
                    locationList:Array<Location> = new Array<Location>();
                  
                    constructor(public databaseAccessor: DatabaseAccessor) {}
                  
                    getLocationsForLikeSearchString(searchString: string) : Observable<Array<Location>> {
                      const searchValue = (searchString == null) ? '%' : searchString.trim() + '%';
                      return <Observable<Array<Location>>> Observable.fromPromise(this.databaseAccessor.runSelectQuery(Location, new Location(), 'WHERE name LIKE ?', [searchValue]));
                    }
                  
                    getLocationById(id: number): Observable<Location> {
                      return <Observable<Location>> Observable.fromPromise(this.databaseAccessor.runSelectQuery(Location, new Location(), 'WHERE id = ?', [id]));
                    }
                  
                    saveLocations(locations: Array<Location>){
                      this.databaseAccessor.runInsertBatchQuery(Location.prototype, locations);
                    }
                  
                  
                  }
                  

                  最后,我写了一个 spec.ts 文件来进行单元测试,就是这样,

                  Finally, I wrote a spec.ts file to unit testing and here is that,

                  import { ComponentFixture, async } from '@angular/core/testing';
                  import { LocationSearchModal } from './LocationSearchModal';
                  import { LocationService } from '../../services/LocationService';
                  import { TestUtils } from '../../test';
                  import { TestBed } from '@angular/core/testing';
                  import { App, NavController, Platform, Config, Keyboard, Form, IonicModule, GestureController, ViewController, LoadingController }  from 'ionic-angular';
                  import { ConfigMock } from '../../mocks';
                  import { TranslateModule } from 'ng2-translate';
                  import { DatabaseAccessor } from  '../../database/DatabaseAccessor';
                  
                  let comp: LocationSearchModal;
                  let fixture: ComponentFixture<LocationSearchModal>;
                  let instance: any = null;
                  
                  describe('LocationSearchModal', () => {
                  
                    beforeEach(async(() => {
                  
                      TestBed.configureTestingModule({
                        declarations: [LocationSearchModal], // declare the test component
                        providers: [App, Platform, Form, Keyboard, NavController, GestureController, LoadingController, LocationService, DatabaseAccessor,
                          { provide: ViewController, useClass: class { ViewController = jasmine.createSpy("viewController"); } },
                          { provide: Config, useClass: ConfigMock },
                        ],
                        imports: [
                          IonicModule,
                          TranslateModule.forRoot(),
                        ],
                      });
                      fixture = TestBed.createComponent(LocationSearchModal);
                      comp = fixture.componentInstance;
                    }));
                  
                    console.log(comp);
                    it('Testing Location Component', () => {
                      expect(comp.temp).toBe('test');
                    })
                  });
                  

                  当我运行以下错误来自终端.(我的单元测试配置是正确的,我用另一个简单的 .spec.ts 文件对其进行了测试)

                  when I am running the following error comes from the terminal. (my unit testing configuration are correct and I tested it with another simple .spec.ts file)

                  错误

                  SUMMARY:
                  ✔ 1 test completed
                  ✖ 1 test failed
                  
                  FAILED TESTS:
                    LocationSearchModal
                      ✖ Testing Location Component
                        Chrome 54.0.2840 (Linux 0.0.0)
                      Failed: Error in ./LocationSearchModal class LocationSearchModal_Host - inline template:0:0 caused by: Cannot read property '_getPortal' of undefined
                      TypeError: Cannot read property '_getPortal' of undefined
                          at App.present (webpack:/media/dilanka/Stuff/CODE%20BASE/Inspection/Unit%20Testing/Inspection-Rewrite/~/ionic-angular/components/app/app.js:78:0 <- src/test.ts:2091:35)
                          at Loading.present (webpack:/media/dilanka/Stuff/CODE%20BASE/Inspection/Unit%20Testing/Inspection-Rewrite/~/ionic-angular/components/loading/loading.js:31:0 <- src/test.ts:38779:26)
                          at LocationSearchModal.filterLocationsForString (webpack:/media/dilanka/Stuff/CODE%20BASE/Inspection/Unit%20Testing/Inspection-Rewrite/src/pages/location-search/LocationSearchModal.ts:9:4184 <- src/test.ts:18993:4170)
                          at new LocationSearchModal (webpack:/media/dilanka/Stuff/CODE%20BASE/Inspection/Unit%20Testing/Inspection-Rewrite/src/pages/location-search/LocationSearchModal.ts:9:3407 <- src/test.ts:18993:3391)
                          at new Wrapper_LocationSearchModal (/DynamicTestModule/LocationSearchModal/wrapper.ngfactory.js:7:18)
                          at _View_LocationSearchModal_Host0.createInternal (/DynamicTestModule/LocationSearchModal/host.ngfactory.js:16:35)
                          at _View_LocationSearchModal_Host0.AppView.create (webpack:/media/dilanka/Stuff/CODE%20BASE/Inspection/Unit%20Testing/Inspection-Rewrite/~/@angular/core/src/linker/view.js:84:0 <- src/test.ts:52350:21)
                          at _View_LocationSearchModal_Host0.DebugAppView.create (webpack:/media/dilanka/Stuff/CODE%20BASE/Inspection/Unit%20Testing/Inspection-Rewrite/~/@angular/core/src/linker/view.js:294:0 <- src/test.ts:52560:44)
                          at ComponentFactory.create (webpack:/media/dilanka/Stuff/CODE%20BASE/Inspection/Unit%20Testing/Inspection-Rewrite/~/@angular/core/src/linker/component_factory.js:152:0 <- src/test.ts:32035:36)
                          at initComponent (webpack:/media/dilanka/Stuff/CODE%20BASE/Inspection/Unit%20Testing/Inspection-Rewrite/~/@angular/core/bundles/core-testing.umd.js:855:0 <- src/test.ts:7416:53)
                  

                  推荐答案

                  我终于解决了这个问题.我使用了一个模拟并在该模拟中定义了所需的方法.然后它工作:)
                  这是一个模拟示例.

                  I Solved this problem finally. I used a mock and defined required methods in that mock. Then It works :)
                  here is an example for a mock.

                  export class ViewControllerMock {
                    public _setHeader(): any { return {} };
                    public _setNavbar(): any { return {} };
                    public _setIONContent(): any { return {} };
                    public _setIONContentRef(): any { return {} };
                  }
                  

                  然后必须将该模拟导入您的 .spec.ts 文件,如下所示

                  then have to import that mock into your .spec.ts file as follows

                  import {ViewControllerMock} from '../../mocks';
                  

                  然后必须在 spec.ts 文件中的提供程序中定义该模拟,如下所示

                  then have to define that mock in your providers in spec.ts file as follows

                  providers: [{ provide: ViewController, useClass: ViewControllerMock}],
                  

                  这篇关于无法读取离子 2 单元测试中未定义的属性“_getPortal"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:ionic 2 ion-datetime ISO 格式问题 下一篇:卡在按值/子键删除父推送键

                  相关文章

                  最新文章

                  <legend id='uUOXu'><style id='uUOXu'><dir id='uUOXu'><q id='uUOXu'></q></dir></style></legend>

                  1. <tfoot id='uUOXu'></tfoot>
                    <i id='uUOXu'><tr id='uUOXu'><dt id='uUOXu'><q id='uUOXu'><span id='uUOXu'><b id='uUOXu'><form id='uUOXu'><ins id='uUOXu'></ins><ul id='uUOXu'></ul><sub id='uUOXu'></sub></form><legend id='uUOXu'></legend><bdo id='uUOXu'><pre id='uUOXu'><center id='uUOXu'></center></pre></bdo></b><th id='uUOXu'></th></span></q></dt></tr></i><div id='uUOXu'><tfoot id='uUOXu'></tfoot><dl id='uUOXu'><fieldset id='uUOXu'></fieldset></dl></div>
                      <bdo id='uUOXu'></bdo><ul id='uUOXu'></ul>

                  2. <small id='uUOXu'></small><noframes id='uUOXu'>