Angular2:" TypeError:无法读取属性' createAsync'未定义"

时间:2016-07-04 23:05:34

标签: unit-testing angular karma-jasmine

单元测试

import {Goal} from '../../providers/goal/goal';
import {GoalSettingsPage} from './goal-settings';

import {Modal, Alert, NavParams, ViewController, Events} from 'ionic-angular';
import {provide,ReflectiveInjector,Component} from '@angular/core'
import {FormBuilder} from '@angular/common';

import {
  beforeEach,
  beforeEachProviders,
  describe,
  expect,
  it,
  xit, 
  TestComponentBuilder, 
  ComponentFixture, 
  inject,
  async
} from '@angular/core/testing';


describe('Goal Settings', () => {

    it('should display header title: "Some Title"', inject([TestComponentBuilder], (tcb: TestComponentBuilder) => {
        return tcb.createAsync(GoalSettingsPage).then((fixture) => {
            fixture.detectChanges();

            var compiled = fixture.debugElement.nativeElement;

            expect(compiled.innerHTML).toContain('ion-title');               
            expect(compiled.querySelector('span'))        .toHaveText('Cancel');
            expect(compiled.querySelector('ion-title')    .innerText).toBe('DrEvil');

        });
  }));

错误消息

  

TypeError:无法读取属性' createAsync'未定义的

问题

Pascal在这里写道:http://5thingsangular.github.io/2016/04/11/issue-1.html injectAsync已被弃用,那么我如何createAsync喜欢那些很酷的家伙呢?

gulp重启后

更新:错误消失。现在我明白了:

  

错误:没有TestComponentBuilder的提供程序!

UPDATE2:

通过注入描述范围而不是范围来解决:

    let tcb;

    //setup
    beforeEachProviders(() => [
        TestComponentBuilder
    ]);

    beforeEach(inject([TestComponentBuilder], _tcb => { 
        tcb = _tcb
    }));

新错误

  

错误:没有编译器的提供程序!

1 个答案:

答案 0 :(得分:5)

导入TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERSTEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,如下所示:

import {
  TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS, TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
}  from '@angular/platform-browser-dynamic/testing';

setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS, TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);

..解决了我的上一次错误。