Angular-CLI TestComponentBuilder.createAsync() tidak menyelesaikan janjinya

Saya telah membuat tes sampel yang sangat sederhana untuk proyek berdasarkan sudut-cli. Masalahnya, seperti yang Anda lihat dari judulnya adalah karena suatu alasan TestComponentBuilder.createAsync() tidak menyelesaikan janjinya. Ini kode saya. Saya curiga masalahnya ada pada file konfigurasi karma-test-shim.js, tapi saya tidak yakin tentang itu. Hasil tes selalu sukses meskipun saya telah menetapkan "expect(true).toEqual(false)" ini untuk pengujian saya. Saya bekerja dengan 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 {
}

person Steven Lignos    schedule 20.07.2016    source sumber


Jawaban (2)


Di sudut 2 RC4 Anda perlu menggabungkan fungsi inject pengujian asinkron Anda dengan async. Ini menjalankan pengujian Anda di AsyncTestZoneSpec dan memastikan bahwa semua panggilan asinkron dalam zona ini telah selesai.

Dalam kasus Anda, Anda harus import {async} from '@angular/core/testing' dan memodifikasi pengujian Anda:

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

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

    }))
);

Sekarang pengujian Anda akan gagal seperti yang diharapkan. Anda juga tidak memerlukan pernyataan pengembalian (mis. pembuat pengembalian...)

person michael    schedule 20.07.2016

Oke michael, kamu benar, ini salahku, tapi masalahnya tetap ada. Saya telah membuat proyek lain dengan sudut-cli hanya untuk memiliki proyek yang bersih untuk dikerjakan dan saya membuat tes yang sangat sederhana berikut.

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);
  })
 })));
});

Namun pelaksanaan tes berhasil. Saya harus menyebutkan bahwa secara default sudut-cli menggunakan RC3 di versi saat ini dan saya telah memperbarui versi sudut ke RC4. Saya menguji pengujian di atas dalam proyek yang sama dengan "injectAsync" alih-alih "async(inject.." dan sudut RC3 dan berfungsi dengan baik dalam kasus ini. Terima kasih

person Steven Lignos    schedule 21.07.2016