2017-06-01 3 views
4

Ich habe gerade begonnen, Karma zum ersten Mal zu verwenden ... Nach diesem Tutorial: https://angular.io/docs/ts/latest/guide/testing.html Ich schreibe einen einfachen Test, um zu überprüfen, ob der Titel korrekt ist. Ich bekomme immer diese Fehler: "Kein Browser erfasst, öffnen http://localhost:9876/". Ich verwende Angular 2 und Typoskript. Dies sind die VersionenKarma-Fehler - Kein gefangener Browser, öffnen http: // localhost: 9876/

"@angular/core": "2.4.10" 
"jasmine-core": "^2.6.2", 
"karma": "^1.7.0". 

Meine Ordnerstruktur sieht wie folgt aus

mydashboard 
-src 
    -app 
    -welcome 
     -welcome.component.ts 
     -welcome.component.spec.ts 
-karma.conf.js 

//karma.conf.js 
module.exports = function(config) { 
    config.set({ 
    basePath: '', 
    frameworks: ['jasmine'], 
    files: ["src/app/**/*.spec.ts" 
    ], 
    exclude: [ 
    ], 
    preprocessors: { 
    }, 
    reporters: ['progress'], 
    port: 9876, 
    colors: true, 
    logLevel: config.LOG_INFO, 
    autoWatch: true, 
    browsers: ['Chrome'], 
    singleRun: false, 
    concurrency: Infinity 
    }) 
} 
//welcome.component.spec.ts 
import { ComponentFixture, TestBed } from '@angular/core/testing'; 
import { By }    from '@angular/platform-browser'; 
import { DebugElement } from '@angular/core'; 
import { WelcomeComponent } from './welcome.component'; 

describe('WelcomeComponent (inline template)',() => { 
    let comp: WelcomeComponent; 
    let fixture: ComponentFixture<WelcomeComponent>; 
    let de:  DebugElement; 
    let el:  HTMLElement; 
    beforeEach(() => { 
    TestBed.configureTestingModule({ 
     declarations: [ WelcomeComponent ], // declare the test component 
    }); 
    fixture = TestBed.createComponent(WelcomeComponent); 
    comp = fixture.componentInstance; // WelcomeComponent test instance 
    // query for the title <h1> by CSS element selector 
    de = fixture.debugElement.query(By.css('h1')); 
    el = de.nativeElement; 
    }); 

    it('should display original title',() => { 
    fixture.detectChanges(); 
    expect(el.textContent).toContain(comp.title); 
}); 
}); 
//welcome.component.ts 
import { Component } from '@angular/core'; 
@Component({ 
    template: '<h1>{{title}}</h1>' 
}) 
export class WelcomeComponent { 
    title = 'Test Tour of Heroes'; 
} 

enter image description here

+1

das ist nur eine Warnung (plus danach Chrome startet), Ihr Problem ist woanders, können Sie mehr Input liefern? und Sie haben nicht den 'plugins' Abschnitt in Ihrer Konfiguration. So etwas wie 'Plugins: ['Karma-Jasmine', 'Karma-Chrom-Launcher']'. Bitte ändern Sie 'logLevel' in' config.LOG_DEBUG' – Edwin

+0

@Edwin Danke. Ich habe Plugins hinzugefügt und logLevel geändert. Ich bekomme die gleiche Warnung und den Fehler 'Executed 0 of 0 ERROR (0.023 secs/0 secs)'. Ich habe oben weitere Codebeispiele hinzugefügt. welcome.component.spec.ts und welcome.component.ts – Mythri

+0

und jetzt mit der neuen Log-Ebene, erhalten Sie neue Ausgabe? oder ist das gleich? Und dann ist die Frage: Haben Sie diese Plugins im Ordner 'node_modules'? – Edwin

Antwort

4

Einige Anrufungen von fixture.debugElement.query Konflikt mit späteren Aufrufen von expect(...), wodurch eine scheinbar unendliche Schleife in Jasmins Code.

Zum Beispiel die Folgenden wird die Fehler verursachen, wenn ein Objekt, das #my-id Spiele vorhanden:

expect(fixture.debugElement.query(By.css('#my-id'))).toBeFalsy(); 

In Ihrem Fall, dass Sie eine andere Kombination von Anrufen hatte, aber es ist das gleiche Rezept: query plus einige expect Anrufe .

als eine vorübergehende Lösung können wir queryAll(...).length statt:

expect(fixture.debugElement.queryAll(By.css('#my-id')).length).toBeFalsy(); 

Dies ist ein Fehler in Jasmine ist, und ist bereits auf diesen Seiten berichtet:

Verwandte Themen