7

Ich habe Probleme auf Karma-Jasmin die Befehlszeilenoption aufrufen, die diese Tests nur für die Ausführung ermöglicht, die einem bestimmten Muster entsprechen. Meine spec lautet wie folgt:Selektive Testausführung in Karma Jasmin mit Pattern-Matching

/path/to/Einzeltest/main.spec.js

describe('my first test suite', function() { 
    it('always passes', function() { 
    expect(true).toBe(true); 
    }); 

    it('still always passes', function() { 
    expect(true).toBe(true); 
    }); 
}); 

Ich gehe davon aus, die Beschreibung (zB "noch immer passiert") ist die Element, mit dem das in der Befehlszeilenoption grep angegebene Muster verglichen wird. Wenn ich versuche, das zweite Beispiel für die Ausführung auf der Tatsache, dass seine Beschreibung das einzige Beispiel ist das Wort „noch“ enthält, sind beide Beispiele, anstatt nur einen ausgeführt:

$ karma start -- --grep=still 
INFO [karma]: Karma v0.12.35 server started at http://localhost:9876/ 
INFO [launcher]: Starting browser PhantomJS 
INFO [PhantomJS 1.9.8 (Linux 0.0.0)]: Connected on socket 7Dn7Ez1Reap7ch0Uzsb0 with id 44623726 
PhantomJS 1.9.8 (Linux 0.0.0): Executed 2 of 2 SUCCESS (0.002 secs/0.001 secs) 

Wie führe ich nur diese eine Beispiel basierend auf einem Muster? Die official documentation gibt kein Beispiel für die Verwendung der Mustervergleichsoption.

Ich lese in der discussion of a pull request, dass die Option grep in Verbindung mit "fit" und "fdescribe" verwendet werden kann. Dies funktioniert beim Test. Im Falle der Verwendung von grep mit "fit", was ist der Zweck des Arguments Muster für die Option grep? (Es wäre schön sein, um Tests ohne die Notwendigkeit selektiv auszuführen, den Quellcode zu erweitern!)

Hier ist der Rest der Dateien in meinem Projekt als Referenz:

/path/to/Einzeltest/karma.conf.js

module.exports = function(config) { 
    config.set({ 
    basePath: '', 
    frameworks: ['jasmine'], 
    files: ['*.spec.js'], 
    exclude: [], 
    preprocessors: {}, 
    reporters: ['progress'], 
    port: 9876, 
    colors: true, 
    logLevel: config.LOG_INFO, 
    autoWatch: false, 
    browsers: ['PhantomJS'], 
    singleRun: true 
    }); 
}; 

/path/to/single-Test/package.json

{ 
    "name": "single-test", 
    "version": "1.0.0", 
    "description": "", 
    "scripts": { 
    "test": "echo \"Error: no test specified\" && exit 1" 
    }, 
    "author": "", 
    "license": "MIT", 
    "devDependencies": { 
    "jasmine-core": "^2.3.4", 
    "karma": "^0.12.35", 
    "karma-jasmine": "^0.3.5", 
    "karma-phantomjs-launcher": "^0.2.0", 
    "phantomjs": "^1.9.17" 
    } 
} 
+0

Verwandte: [verwenden 'fdescribe',' fit'] (http://stackoverflow.com/a/23793631 /) anstelle von 'describe',' it' –

Antwort

5

Sie müssen einen Karma-Server starten und dann die Option --grep in einem Karma-Runner angeben. I.e. etwas entlang der Linien von:

karma start path/to/karma.conf.js 

Dann in einem anderen Terminal:

karma run path/to/karma.conf.js -- --grep=still 

Es ist wichtig, dass Sie singleRun: false in den Konfigurationsoptionen.

+0

Zusätzliche Anmerkung: Wenn Sie die obigen Befehle ausführen, wird der zweite Terminalbefehl nur einmal ausgeführt und beendet, und das erste Terminalfenster wird weiterhin nach Änderungen Ausschau halten und nur die gefilterte Teilmenge von Tests. –

+1

Wenn Sie mehrere Tags in keiner bestimmten Reihenfolge grep möchten, können Sie die Methode aus [dieser Antwort] verwenden (https://stackoverflow.com/questions/469913/regular-expressions-is-there-an-and-operator# answer-470602), z für die Tags '# tag1' und' # tag2': '--grep = '(? =. * # tag1) (? =. * # tag2)''. – Will

0

Es gibt karma-jasmine-spec-tags Plugin, das Ausführen von Tests durch Tags in ihren Namen filtern hilft.

Beispiel Nutzung:

$ karma start --tags smoke 
$ karma start --skip-tags slow,bench 
$ karma start --tags bench --skip-tags slow 
$ karma start --tag-prefix 'scope:' --tags critical 

Wo eine Spezifikation folgt:

describe('Example test',() => { 
    it('should be a #smoke test',() => { 
     // ... 
    }); 

    it('#slow test',() => { 
     // ... 
    }); 
}) 

describe('Performance test suite #bench',() => { 
    it('#fast #smoke test',() => { 
     // ... 
    }); 

    it('#slow test',() => { 
     // ... 
    }); 
}) 

describe('Custom tag prefix',() => { 
    it('test scope:critical',() => { 
     // ... 
    }); 
})