Karma, PhantomJS et ES6 Promises

j'écris une bibliothèque JavaScript qui utilise les nouvelles promesses es6. Je peux tester la bibliothèque dans Firefox parce que les promesses sont définies. Cependant, quand j'essaye de tester mon code avec Karma et PhantomJS, j'obtiens l'erreur Can't find variable: Promise.. Je suppose que c'est parce que le navigateur PhantomJS ne supporte pas encore les promesses es6.

Comment puis-je configurer Karma pour introduire le polyfill pour des promesses?

35
demandé sur Travis Parks 2015-04-01 15:40:55

5 réponses

vous pouvez tirer dans le Babel polyfill en installant simplement Babel Polyfill:

npm install --save-dev babel-polyfill

et ensuite inclure le fichier polyfill avant vos fichiers source et test dans le files de votre karma.conf.js:

files: [
  'node_modules/babel-polyfill/dist/polyfill.js',
  'index.js',   //could be /src/**/*.js
  'index.spec.js' //could be /test/**/*.spec.js
],

a moins que vous ne sachiez que tous vos navigateurs cibles prennent en charge les promesses, vous voulez probablement appliquer ce polyfill à votre build libéré Aussi.

si vous vous sentez vraiment aventureux, vous pouvez utiliser Browserify pour extraire des fichiers vers rendez vos tests plus modulaires, puis utilisez Babelify pour transposer ES6 à ES5. J'ai créé un exemple de projet avec ceux - ci et un test de travail impliquant une promesse (tournant sur PhantomJS2) pour référence.

68
répondu spikeheap 2017-08-18 15:54:03

pour Babel 6, Nous avons besoin d'installer babel-polyfill à l'appui de la promesse.

npm install --save-dev babel-polyfill

et ajouter une ligne dans karma.conf.js dans le files

files: [
  'node_modules/babel-polyfill/dist/polyfill.js',
  ....
]

c'est bien documenté dans https://github.com/babel/karma-babel-preprocessor#polyfill

12
répondu gasolin 2015-11-07 13:36:54

thread devrait vous aider. Selon elle, il semble que vous devriez essayer D'utiliser PhantomJS2 avec ES6. Vous pouvez également prendre un coup d'oeil à projet, qui traitent le sujet proche que le vôtre.

j'espère que ça peut vous aider

0
répondu Tony 2015-04-01 13:34:13

Vous pouvez utiliser karma-babel-préprocesseur pour les fichiers qui utilisent des fonctionnalités ES6. L'installer avec

npm install --save-dev karma-babel-preprocessor

puis ajouter spécifier quels fichiers doivent être prétraitées vous karma.conf:

preprocessors: {
      "src/**/*.js": ["babel"],
      "test/**/*.js": ["babel"]
    },
0
répondu SET 2015-10-24 23:38:40

comme l'a correctement souligné l'auteur, il n'est pas en mesure de reconnaître la promesse es6. Pour le charger, le module es6-promise peut être chargé à l'aide de webpack.Provedeplugin et sa configuration dans le tableau des plugins de webpack.

plugins: [
        new webpack.ProvidePlugin({
            'Promise': 'es6-promise'
        })
    ]

Cela semble fonctionner pour moi!

0
répondu MKant 2017-08-18 15:28:45