11

I am trying to run some unit tests for few days now without success. My application is written in typescript (the unit tests are written in typescript as well). Here is my karma configuration file:

module.exports = function (config) {
  config.set({

    basePath: "../../../../",

    frameworks: [
      "jasmine",
      "systemjs"
    ],

    browsers: ['PhantomJS'],

    singleRun: true,
    reporters: ['progress'],

    systemjs: {
      config: {
        paths: {
          systemjs: "src/main/webapp/static/js/engage/lib/bower/system.js/dist/system.src.js",
          typescript: "build/node_modules/typescript/lib/typescript.js"
        },
        transpiler: "typescript"
      },

      // testFileSuffix: ".spec.ts"
    },

    files: [
      'src/main/webapp/static/js/engage/dist/vendor/vendor.min.js',
      'src/main/webapp/static/js/engage/lib/bower/system.js/dist/system-polyfills.src.js',
      'src/main/webapp/static/js/engage/lib/bower/angular-mocks/angular-mocks.js',
      {pattern: "src/main/webapp/static/js/engage/app/**/*.spec.ts", served: true, included: false}
    ]
  });
};

When I run karma start I get the following error:

05 09 2016 21:39:45.543:INFO [karma]: Karma v1.2.0 server started at http://localhost:9876/
05 09 2016 21:39:45.546:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency
05 09 2016 21:39:45.558:INFO [launcher]: Starting browser PhantomJS
05 09 2016 21:39:47.631:INFO [PhantomJS 1.9.8 (Mac OS X 0.0.0)]: Connected on socket /#c-ZoxCczyYymPDAtAAAA with id 8911412
05 09 2016 21:39:47.650:WARN [web-server]: 404: /base/src/main/webapp/static/js/engage/lib/bower/system.js/dist/system-polyfills.js
PhantomJS 1.9.8 (Mac OS X 0.0.0) ERROR
  You need to include some adapter that implements __karma__.start method!

If I change the browser property to Chrome, I get the following error:

Chrome 52.0.2743 (Mac OS X 10.11.6) ERROR
  Error: ReferenceError: jasmineRequire is not defined
            at eval (build/node_modules/karma-jasmine/lib/boot.js:14:32)
            at eval (build/node_modules/karma-jasmine/lib/boot.js:41:2)
        Evaluating build/node_modules/karma-jasmine/lib/boot.js
        Error loading build/node_modules/karma-jasmine/lib/boot.js

Here is my package.json relevant dependencies:

"phantomjs": "^1.9.11",
"karma-systemjs": "^0.14.0",
"karma-jasmine": "^1.0.2",
"karma-chrome-launcher": "^0.1.5",
"jasmine-core": "^2.5.0"

Any help would be appreciated!

Guy
  • 10,931
  • 5
  • 36
  • 47
vlio20
  • 8,955
  • 18
  • 95
  • 180
  • FWIW if you are willing to consider using karma-jspm instead of karma-systemjs here is the question with a link to a repo with now hopefully working example http://stackoverflow.com/questions/39028639/karma-jspm-typescript-not-found-ts-js – artem Sep 06 '16 at 03:38
  • @artem, I couldn't find the link to the repo – vlio20 Sep 06 '16 at 05:06
  • it's https://github.com/Larchy/karma-jspm-typescript-coverage/tree/master – artem Sep 06 '16 at 05:33
  • @artem, did you use it? did you manage to make it work for you? – vlio20 Sep 06 '16 at 05:35
  • nope, it's not mine – artem Sep 06 '16 at 05:37
  • Have some suggestions - 1) Install Karma-PhantomJS-launcher 2)Upgrade to latest versions of your dependencies (i.e. remove items from package.json and install latest for them.. 3)Look at this link - https://github.com/rolaveric/karma-systemjs/issues/78 4)Look at - https://github.com/taras42/karma-jasmine-html-reporter/issues/4 – TypeScripter Sep 12 '16 at 05:27

2 Answers2

3
  1. I would try to include systemjs as first framework as it is written in documentation
  2. Compile your typescript before loading it with systemjs and don't use systemjs typescript compile. That will decrease complexity of your karma tests which makes them more solid
  3. Try changing included to true for your spec files, that helped me with some issues. But I'm not sure about that
  4. leave your basePath at ./ as this als just makes trouble
  5. Check the path to your system.js as it throws a 404 error

My configuration for system.js looks like this

systemjs: {
    configFile: 'dev/systemjs.config.js',
    config: {
        map: {
            'systemjs':          'node_modules/systemjs/dist/system.js',
            'system-polyfills':  'node_modules/systemjs/dist/system-polyfills.js',
            'es6-module-loader': 'node_modules/es6-module-loader/dist/es6-module-loader.js'
        }
    }
}

Maybe also some of the configuration snippets from this questions might help: Angular 2 + Karma + karma-jspm + karma-coverage + typescript report phantomJS failure

Community
  • 1
  • 1
DaSch
  • 931
  • 1
  • 5
  • 20
1

Try to add the plugins option to the karma config

plugins: [
  'karma-jasmine',
  'karma-chrome-launcher'
],

Use the last node.js 6.5 and update your dependencies to the latest version

vitomd
  • 806
  • 7
  • 14