Angular-CLI TestComponentBuilder.createAsync()无法解析其承诺

时间:2016-07-20 10:01:57

标签: unit-testing angular angular-cli

我基于angular-cli为项目创建了一个非常简单的样本测试。从标题中可以看出,问题在于TestComponentBuilder.createAsync()无法解析其承诺。这是我的代码。我怀疑问题出在karma-test-shim.js配置文件中,但我对此并不确定。虽然我已经设置了这个"期望(真实).toEqual(false)"但测试的结果总是成功的。为了我的考试。我正在使用Angular 2-RC4

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

import { Component } from '@angular/core';
import { By } from '@angular/platform-browser';

describe('Component: CollectionCounterWidgetComponent', () => {

let builder: TestComponentBuilder;
beforeEach(inject([TestComponentBuilder], function (tcb:  TestComponentBuilder) {
builder = tcb;
}));

it('should create the CollectionCounterWidgetComponent component',  inject([], () => {
return builder.createAsync(ComponentTestController)
  .then((fixture: ComponentFixture<any>) => {
    fixture.detectChanges();
    expect(true).toEqual(false);
  });

}));
});

@Component({
selector: 'test',
template: `
<h1>why?</h1>
`
})
class ComponentTestController {
}

2 个答案:

答案 0 :(得分:0)

在angular 2 RC4中,您需要使用injectasync函数包装为异步测试。这将在AsyncTestZoneSpec中运行您的测试,并确保此区域内的所有异步调用都已完成。

在您的情况下,您应该import {async} from '@angular/core/testing'并修改您的测试:

it('should create the CollectionCounterWidgetComponent component', async( inject([], () => {

     builder.createAsync(TestControllerComponent)
      .then((fixture: ComponentFixture<any>) => {
        fixture.detectChanges();
        expect(true).toEqual(false);
      });

    }))
);

现在您的测试将按预期失败。此外,您不需要返回声明(例如,返回构建器......)

答案 1 :(得分:0)

好的迈克尔,你是对的,这是我的错,但问题仍然存在。我用angular-cli创建了另一个项目,只是为了有一个干净的项目,我创建了以下非常简单的测试。

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

import { AppComponent } from './app.component' ;

describe('Component: AppComponent', () => {

it('should create an instance', async(inject([TestComponentBuilder], (tcb: TestComponentBuilder) => {
  tcb.createAsync(AppComponent)
  .then(fixture => {
    expect(true).toBe(false);
  })
 })));
});

但是测试的执行是成功的。我必须提一下,默认情况下,angular-cli在当前版本中使用RC3,我已将angular的版本更新为RC4。我在同一个项目中使用“injectAsync”测试了上述测试,而不是“async(inject ..”和角度RC3,并且在这种情况下正常工作。谢谢