Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Karma, PhantomJS and es6 Promises

I am writing a JavaScript library that uses the new es6 promises. I can test the library in Firefox because promises are defined. However, when I try to test my code with Karma and PhantomJS, I get the error Can't find variable: Promise.. I am guessing this is because the PhantomJS browser doesn't support es6 promises yet.

How can I configure Karma to bring in the polyfill for promises?

like image 358
Travis Parks Avatar asked Apr 01 '15 12:04

Travis Parks


1 Answers

You can pull in the Babel polyfill by simply installing Babel Polyfill:

npm install --save-dev babel-polyfill 

and then include the polyfill file before your source and test files within the files section of your 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 ], 

Unless you know that all your target browsers support Promises, you probably want to apply this polyfill to your released build too.

If you're feeling really adventurous you can use Browserify to pull files in to make your testing more modular, and then use Babelify to transpile ES6 to ES5. I've created a sample project with these and a working test involving a Promise (running on PhantomJS2) for reference.

like image 126
spikeheap Avatar answered Sep 22 '22 14:09

spikeheap