Moka tests unitaires en cours d'exécution avec le Karma - done() n'est pas défini
Que j'essaie de faire des tests écrits avec Moka à courir Karma, et ils genre de travail, mais je ne peux pas utiliser la méthode done() pour mettre en œuvre async tests, ce qui en fait essentiellement les outils inutile pour moi. Ce qui me manque?
karma.conf.js
module.exports = function(config) {
config.set({
basePath: '../..',
frameworks: ['mocha', 'requirejs', 'qunit'],
client: {
mocha: {
ui: 'bdd'
}
},
files: [
{pattern: 'libs/**/*.js', included: false},
{pattern: 'src/**/*.js', included: false},
{pattern: 'tests/mocha/mocha.js', included: false},
{pattern: 'tests/should/should.js', included: false},
{pattern: 'tests/**/*Spec.js', included: false},
'tests/karma/test-main.js'
],
exclude: [
'src/main.js'
],
//test results reporter to use
//possible values: 'dots', 'progress', 'junit', 'growl', 'coverage'
reporters: ['progress', 'dots'],
port: 9876,
colors: true,
//possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
logLevel: config.LOG_WARN,
autoWatch: true,
//Start these browsers, currently available:
//- Chrome
//- ChromeCanary
//- Firefox
//- Opera (has to be installed with `npm install karma-opera-launcher`)
//- Safari (only Mac; has to be installed with `npm install karma-safari-launcher`)
//- PhantomJS
//- IE (only Windows; has to be installed with `npm install karma-ie-launcher`)
browsers: ['Chrome'],
//If browser does not capture in given timeout [ms], kill it
captureTimeout: 60000,
//Continuous Integration mode
//if true, it capture browsers, run tests and exit
singleRun: false
});
};
test-main.js (la configuration de RequireJS)
var allTestFiles = [];
var pathToModule = function(path) {
return path.replace(/^\/base\//, '../').replace(/\.js$/, '');
};
Object.keys(window.__karma__.files).forEach(function(file) {
if (/Spec\.js$/.test(file)) {
//Normalize paths to RequireJS module names.
allTestFiles.push(pathToModule(file));
}
});
require.config({
//Karma serves files under /base, which is the basePath from your config file
baseUrl: '/base/src',
paths: {
'should': '../tests/should/should',
'mocha': '../tests/mocha/mocha',
'pubsub': '../libs/pubsub/pubsub',
'jquery': '../libs/jquery/jquery-1.10.2',
'jquery-mobile': '//code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min'
},
//dynamically load all test files
deps: allTestFiles,
//we have to kickoff jasmine, as it is asynchronous
callback: window.__karma__.start
});
tests/fooSpec.js
define(['music/note'], function(Note) {
describe('nothing', function(done) {
it('a silly test', function() {
var note = new Note;
note.should.not.eql(32);
});
done();
});
...
Si ce n'est un exemple artificiel, il réussit si je supprime le fait (). Comme il est, j'obtiens:
Uncaught TypeError: undefined is not a function
at /Library/WebServer/Documents/vg/tests/mocha/fooSpec.js:8
C'est le fait (). Comment/pourquoi ce n'est pas définie? Je ne comprends pas où d'autre à configurer Moka (ou des options). Est-il une sorte d'espace de noms global ou de la méta-programmation de la magie provoquant RequireJS pour interférer avec Moka?
Je suis d'exécuter les tests en Chrome 33 sur OS X 10.9.2, dans le cas qui est au tous les. J'ai tué une tonne de temps sur ce sujet et je suis prêt à renoncer à des tests automatisés 🙁 -- avait même des murs de briques avec QUnit/Karma/RequireJS et n'ont pas été en mesure de trouver une alternative à réussir à automatiser les tests. Je me sens comme un idiot.
OriginalL'auteur Jason Boyd | 2014-03-19
Vous devez vous connecter pour publier un commentaire.
À Moka, le
done
de rappel est pourit
,before
,after
,beforeEach
,afterEach
. Donc:Voici la doc.
OriginalL'auteur Louis
Saint -%$#@!
Je ne serais jamais dans un million d'années ont pensé que ce serait barf:
Mais cela fonctionne bien:
Je soupçonne que la version que tu dis fonctionne fine génère une exception qui finit par être avalé par quelque chose. C'est certainement le cas que par le temps qu'il exécute Moka ne sera pas un souci.
D'accord, mais il fonctionne comme indiqué. Le test passe/ne parvient pas comme prévu. Êtes-vous ce qui suggère que la mise en œuvre est de ne pas passer quoi que ce soit(), avant(), etc. et de manière asynchrone (seulement) de capturer des exceptions si le code client a appelé indéfini() ?
J'ai vérifié que c'est exactement ce que fait. Ou, ce qui est, il silencieusement intercepte les erreurs renvoyée de manière asynchrone (d'après le scénario de test est revenu), ce qui a pour effet net que vous pouvez utiliser done() pour décrire() des cas, ou, au moins, semblent. Je ne suis pas sûr de ce qui est souhaitable comportement...
Avez-vous regarde la réponse que j'ai écrit?
OriginalL'auteur Jason Boyd
Le test sont en cours d'exécution dans cet exemple ne nécessite pas le faire (les) de rappel. Il n'est pas asynchrone. Par exemple, si le fait de rappel est nécessaire....
Votre test ne doit pas avoir fait un rappel
Seulement le " il " fonction permet de faire de rappel. décrire n'est pas. Votre problème n'est pas en reste avec le karma. Votre moka tests ne sont pas définis correctement.
OriginalL'auteur startswithaj