J'essaie d'ajouter des tests unitaires à l'un de mes projets.
Jusqu'à présent, j'ai installé et configuré le karma et installé Jasmin. J'ai un fichier de test dans mon dossier test/
.
Le serveur karma a démarré, la page du navigateur est prête, mais karma run
Échoue comme suit:
$ karma run karma-conf.js
[2014-06-14 15:19:11.046] [DEBUG] config - Loading config /foo/test/karma-conf.js
Waiting for previous execution...
Chrome 35.0.1916 (Linux) ERROR
You need to include some adapter that implements __karma__.start method!
Ce message d'erreur ne concerne pas bien Google.
Est-ce quelque chose d'évident ou dois-je fournir plus d'informations?
Cela semble être une erreur très générale, mais dans mon cas, le problème était que je n’avais pas exécuté karma start
À partir du dossier approprié ou que je ne l’avais pas redémarré après avoir modifié la configuration.
Je laisserai cette question ouverte et j'espère que cela deviendra une ressource pour les autres utilisateurs de ce message d'erreur.
Si vous nommez votre fichier de configuration de karma karma.conf.js
, vous pouvez simplement taper karma start
.
Sinon, spécifiez le nom du fichier karma start karmafile.js
(J'étais dans le bon répertoire, mais je n'ai pas spécifié de nom de fichier.)
Vous devez exécuter votre karma run
ou quelque fonction que ce soit dans le dossier où se trouve karma-conf.js.
Dans mon cas, je devais renommer le fichier en karma.conf.js puis faire karma start
J'ai eu un problème avec karma.conf.js
format de code de fichier:
files: [
// Modules
,"client/bower_components/angular/angular.min.js"
,"client/bower_components/angular-mocks/angular-mocks.js"
// App
,"client/app/app.module.js"
// Test
// ,"test/**/*.spec.js"
],
La virgule supplémentaire dans le tableau files
a été provoquée par cette erreur:
You need to include some adapter that implements __karma__.start method!
Je ne courais pas karma start commande depuis le chemin où se trouvait karma.conf.js. Je suis passé à ce dossier et j'ai exécuté la même commande. C'est tout
Je faisais face à ce problème lors de l'exécution des spécifications sur la base de code Angular.js. Je devais courir npm install karma-jasmine -g
pour que cela fonctionne.
Si vous tapez "karma start", vous devez avoir un fichier karma.conf.js dans le dossier actuel. ou simplement "karma start /path/karma.conf.js"
Essayez de créer un nouveau karmar.conf.js en "karma init /path/karma.conf.js"
Dans mon cas, le message était en fait très descriptif: j'ai oublié d'ajouter un adaptateur, dans mon cas Jasmine, dans le fichier de configuration. Ainsi:
module.exports = function(config) {
config.set({
browsers: ['Chrome'],
singleRun: true,
frameworks: ['jasmine'],
files: [
// ... files ...
],
// other configs
});
};
Vous devez configurer votre fichier "my.conf.js", car il contient toutes les informations à utiliser pour tester votre code.
Tout ce que vous devez écrire est le suivant:
Le fichier de configuration peut être généré en utilisant karma init:
$ karma init my.conf.js
Quel framework de test souhaitez-vous utiliser? Appuyez sur l'onglet pour lister les options possibles. Entrez pour passer à la question suivante.
jasmin
Voulez-vous utiliser Require.js? Cela va ajouter le plugin Require.js. Appuyez sur l'onglet pour lister les options possibles. Entrez pour passer à la question suivante.
non
Voulez-vous capturer un navigateur automatiquement? Appuyez sur l'onglet pour lister les options possibles. Entrez une chaîne vide pour passer à la question suivante.
Chrome
Quel est l'emplacement de vos fichiers source et de test? Vous pouvez utiliser des modèles globaux, par exemple. "js/*. js" ou "test/**/* Spec.js". Appuyez sur Entrée pour passer à la question suivante.
* .js test/**/*. js
Les fichiers inclus dans les modèles précédents doivent-ils être exclus? Vous pouvez utiliser des modèles globaux, par exemple. "**/*. swp".
Appuyez sur Entrée pour passer à la question suivante.
Voulez-vous que Karma surveille tous les fichiers et exécute les tests de modification? Appuyez sur l'onglet pour lister les options possibles.
oui
Fichier de configuration généré à "/Users/vojta/Code/karma/my.conf.js".
J'avais la même erreur car le projet utilisait Babel 6 et j'avais oublié d'ajouter le fichier babelrc. Partager juste au cas où cela pourrait aider.
Tt se plaint de l'adaptateur qui est probablement jasmine ou moka. Soit l'adaptateur est manquant, soit la configuration n'est pas correcte, soit une version obsolète ou erronée de l'adaptateur.
Dans mon cas, j'avais une ancienne version de mocha 2.5.3 qui n'était pas compatible avec le karma 1+. J'ai mis à jour la dépendance mocha à la dernière version disponible 3.2.0 et le problème résolu.
Alors que je travaillais sur de nombreuses erreurs décrites de manière vague, j'ai essayé de définir basePath: '../', après avoir corrigé d'autres erreurs (comme des virgules manquantes décrites comme des erreurs de contenu d'objet), le dernier changement effectué sur basePath: '' a permis au karma de fonctionner. Les déclarations d'erreur du karma nécessitent beaucoup de travail. Ce n'est pas simple de le faire.
Je dois ajouter que dans mon cas, le karma me donnait l'erreur car j'avais entre crochets le nom d'un des dossiers parents.
Dans mon cas, j’appliquais par erreur le préprocesseur commonjs au karma-*
modules et le adapter.js
de karma-chrome
et karma-firefox
était cassé de cette façon.
Malheureusement, c'est une erreur très générique.
J'ai eu le même problème. Mon navigateur s'ouvrirait mais sur mon terminal, l'erreur suivante serait renvoyée
30 08 2017 11:19:28.272:INFO [Chrome 58.0.3029 (Linux 0.0.0)]: Connected `enter code here`on socket 5sSs6E5KmpUVRp6LAAAB with id 93886631
Chrome 58.0.3029 (Linux 0.0.0) ERRORSome of your tests did a full page reload!
J'ai vérifié mon fichier karma.conf.js. Dans le tableau de framework, j'avais inclus jasmine et requirejs. Mais je n’avais installé que du karma-jasmine.
Le problème dans mon cas était que le karma ne récupérait aucun fichier. Le résoudre dans karma.conf.js a résolu le problème.
J'ai eu du mal avec ça aussi. Ce que je suis venu à est que cette erreur se produit parce que l'une des raisons suivantes
karma.conf.js
dans le répertoire en cours ou aucun fichier de configuration spécifié dans la commande)Mon problème était que mon fichier de configuration s'appelait karma.config.js
au lieu de karma.conf.js
.
Si vous avez installé l'adaptateur de test mais que cela ne fonctionne toujours pas, essayez d'exécuter karma init
et passez par la configuration de configuration guidée.
Dans mon cas, ce n'était pas du tout lié au karma! Je lance karma de gulp, avec ES6/babel, et il y avait en fait une erreur de syntaxe de code, signalée par une erreur de babel au-dessus de mon karma:
ERREUR [preprocessor.babel]: xxx.js: jeton inattendu (19:83)
J'ai corrigé cela dans mon src et le karma était heureux à nouveau.
J'ai eu une mauvaise configuration de 'fichiers' dans mon karma.conf.js
files: ['**/*.js'],
cela rattrape tous les fichiers de node_modules /, y compris ceux du plugin karma-jasmine, vu que les fichiers source ne sont pas chargés au démarrage. Passer à
files: [
'src/*.js',
'spec/*.js'
],
résolu le problème dans mon cas
Dans mon cas, le nom du fichier de configuration était différent. Ainsi, l’exécution de la commande spécifiant le fichier conf a résolu mon problème.
>> karma start unit-tests.conf.js
No captured browser, open http://localhost:9876/
...
Et pour 'PhantomJS', l'ouverture du lien spécifié (localhost: 9876) dans le navigateur exécute les cas de test.
J'espère que ça aide. :)
EDIT 1: Mon fichier de configuration Karma
module.exports = function(config) {
config.set({
// base path that will be used to resolve all patterns (eg. files, exclude)
basePath: '',
// frameworks to use
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
frameworks: ['jasmine'],
// list of files / patterns to load in the browser
files: [
'./node_modules/angular/angular.js',
'./node_modules/angular-ui-router/release/angular-ui-router.js',
'./node_modules/angular-mocks/angular-mocks.js',
'./app/services/users/users.js',
'./app/app.js',
'./app/services/users/users.spec.js'
],
// list of files to exclude
exclude: [
],
// preprocess matching files before serving them to the browser
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
preprocessors: {
},
// test results reporter to use
// possible values: 'dots', 'progress'
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
reporters: ['spec'],
// web server port
port: 9876,
// enable / disable colors in the output (reporters and logs)
colors: true,
// level of logging
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
logLevel: config.LOG_INFO,
// enable / disable watching file and executing tests whenever any file changes
autoWatch: true,
// start these browsers
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
browsers: ['Chrome'],
// Continuous Integration mode
// if true, Karma captures browsers, runs the tests and exits
singleRun: false,
// Concurrency level
// how many browser should be started simultaneous
concurrency: Infinity
})
}
Le même problème m'est arrivé, et cela était dû à un module obsolète.
Fonctionnement npm update
résolu.
FWIW - la recherche du chemin de fichier de karma.conf.js
A fonctionné pour moi localement, mais pas sur mon constructeur jenkins. Je n'ai aucune idée pourquoi c'est le cas, mais sur Jenkins, cette erreur était générée à moins que le fichier karma.conf.js
Ne se trouve dans le répertoire racine où la commande karma a été donnée. J'utilise Rails et exécute les spécifications js par le biais d'une tâche de ratissage. Le code ci-dessous peut être utile pour certains.
Vous devrez spécifier le répertoire de karma.config.js
quand vous lancez le karma.
Essayer
karma start karma.config.js