2016-07-20 59 views
0

我已经为基于angular-cli的项目创建了一个非常简单的示例测试。从标题中可以看出,问题在于TestComponentBuilder.createAsync()没有解决它的承诺。这是我的代码。我怀疑问题出在karma-test-shim.js配置文件中,但我不确定这一点。尽管我已经为我的测试设置了“expect(true).toEqual(false)”,但测试的结果总是成功。我与角2-RC4Angular-CLI TestComponentBuilder.createAsync()未解决其承诺

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

工作在角2 RC4你需要async包裹inject功能的异步测试。这将在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); 
     }); 

    })) 
); 

现在如预期测试将会失败。你也不需要return语句(例如return builder ...)

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,我已经将角度版本更新为RC4。我在同一个项目中使用“injectAsync”测试了上述测试,而不是“async(inject ..”)和angular RC3,并且在这种情况下正常工作。谢谢