我基于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 {
}
答案 0 :(得分:0)
在angular 2 RC4中,您需要使用inject
将async
函数包装为异步测试。这将在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,并且在这种情况下正常工作。谢谢