2017-04-07 49 views
0

大家都不存在。我正在通过这个boilerplate构建一个Ionic应用程序。 现在,我正在为特定页面构建测试,并且我正在使用茉莉花来嘲笑提供程序并设置方法的预期行为。 这就是beforeEach()如何方法看起来像看起来像:Ionic + Jasmine + Tslint - 属性'和'

beforeEach(() => { 
      mockLoadingController = jasmine.createSpyObj('ModalController', ['create', 'present', 'dismiss']); 
      mockLoadingController.create.and.returnValue(mockLoadingController); 

      mockModalController = jasmine.createSpyObj('LoadingController', ['create', 'present', 
      'onDidDismiss', 'dismiss']); 
      mockModalController.create.and.returnValue(mockModalController); 

      mockGeolocation = jasmine.createSpyObj('Geolocation', ['getCurrentPosition']); 

      mockGeolocation.getCurrentPosition.and.callFake(() => { 
      return {then: () => { }}; 
      }); 
      mockEvents = jasmine.createSpyObj('Events', ['publish', 'subscribe']); 
      TestBed.configureTestingModule({ 
      schemas: [CUSTOM_ELEMENTS_SCHEMA], 
      providers: [ 
       { provide: NavController, useValue: mockNavController }, 
       { provide: LoadingController, useValue: mockLoadingController }, 
       { provide: ModalController, useValue: mockModalController }, 
       { provide: Geolocation, useValue: mockGeolocation }, 
       { provide: Events, useValue: mockEvents }, 
       LocationPage, 
      ], 
      }, 
    ); }); 

当我定义为getCurrentPosition方法的承诺回报的问题开始:

mockGeolocation.getCurrentPosition.and.callFake(() => { 
      return {then: () => { }}; 
    }); 

我使用tslint而测试,它给我以下错误

ERROR in [at-loader] ./src/pages/location/location.page.spec.ts:24:40 
    TS2339: Property 'and' does not exist on type '(options?: GeolocationOptions) => Promise<Geoposition>'. 

问题是:我如何克服这个问题,使TSLint不再抱怨这个代码?

+0

看来你的问题不在于tslint。你的代码'mockGeolocation.getCurrentPosition.and.callFake'是错误的。我认为它需要像这样:'mockGeolocation.create.and.getCurrentPosition ....'。看看其他模拟模式(例如'mockModalController') – Diullei

回答

1

问题解决了! 我忘了细节,我宣布变量的方法:

describe('Location Page',() => { 
    let mockLoadingController: any; 
    let mockModalController: any; 
    let mockGeolocation: Geolocation; 
    let mockEvents: Events; 
    beforeEach(() => { 
    //rest of the code here 

正如你所看到的,我定义的类型到mockGeolocation变量,我没有设置其他为任何。将所有变量设置为与茉莉花完美配合,并且不会在tslint中产生错误。

所以正确的代码是这样的:

describe('Location Page',() => { 
    let mockLoadingController: any; 
    let mockModalController: any; 
    let mockGeolocation: any; 
    let mockEvents: any; 
    beforeEach(() => {