48
votes

I just started with unit test my angular app with karma. Everything working as expected

Chrome 26.0 (Windows): Executed 1 of 1
Chrome 26.0 (Windows): Executed 1 of 1 SUCCESS (0.878 secs / 0.112 secs)

However, is there any way to output more info about the result of the test. For example, Suite and test names it is executing and their result. I've read few tutorials where Jasmine test result outputs in browser. I'm wondering it can be achieved in karma too.

6
If there's error - it will give detailed result report, otherwise it just says that tests have succesfully passed (do you really need detailed reports on succesful tests?). If you want to see results in browser, you should put singleRun = false in test runner configuration (at least there is such attribute in Karma Test Runner - karma-runner.github.io/0.8/config/configuration-file.html), that way the browser will not close after tests.the-lay

6 Answers

23
votes

I was looking for something similar, and found this: https://github.com/usrz/javascript-karma-verbose-reporter. Generates this kind of output:

$ karma start --reporters=verbose

Suites and tests results:

 - the app.router.config module :
   * contains a router property : ok
   * configures the router title : ok
   * should have a login route : ok
 - the organization module :
   * contains a state property : ok
   * should have a streams route after configuration : ok
   * when activated, should set state based on organization in route : ok
 - the streams module :
   * points to state : ok
   * loads organization streams upon activation : ok
   * loads organization streams via API : ok

Browser results:

 - PhantomJS 1.9.8 (Mac OS X 0.0.0): 9 tests
   - 9 ok

To make this a default option, you can add this to your karma config, e.g.:

reporters: ['verbose', 'junit']
15
votes

I've just finished a HTML reporter for Karma, so you could add it to the reporters. You will get some additional information as in the console but you can go with "singleRun = true" in your configuration. The plugin is located here:

https://npmjs.org/package/karma-htmlfile-reporter

After installing the plugin via "npm install karma-htmlfile-reporter -g", you just need to add some lines to your karma.conf.js:

reporters: ['progress', 'html'],

htmlReporter: {
  outputFile: 'tests/units.html'
},

plugins: [
  // ... your other plugins here
  'karma-htmlfile-reporter'
]

Now, after running your Karma tests, the plugin will produce a styled HTML file you can view in your browser.

9
votes

As Ilja said, I wouldn't know what kind of information you'd want from successful tests. You could however open the debug-page if you're running the tests in a browser: Probably at http://localhost:9876/debug.html. All Unit-tests get logged to console there.

8
votes

I think this Documention may help you to config its output in console.

As is described:

reporters: ['progress', 'junit']
  • The 'progress' is for output in console
  • The 'junit' is a karma plugin for output in outside files. :)
7
votes

Following from @Carles Barrobés's answer. The original question was talking about angular applications. So I thought I would list the steps to get this to work with ng test

Install verbose reporter:

npm install --save-dev karma-verbose-reporter

Update your karma.conf.js file to include the following:

module.exports = function (config) {
  config.set({
    plugins: [
      require('karma-verbose-reporter')
    ],
    reporters: ['verbose']
  });
};

Note, I have only included settings relevant to reporting, of course, leave your other settings in the config file as is.

Now you can run ng test to get verbose output

0
votes

I got what you want. You want detailed report in console itself.

With 'progress', it only prints like "this many success out of this. but not detailed report."

example : Executed 1 of 1 SUCCESS (0.878 secs / 0.112 secs)

reporters: ['progress']

For printing detail report in console itself use "mocha" report which prints details execution in console the way "kjhtml" does in broswer.

reporters: ['mocha']

mocha prints in console itself, used with phantomjs browser and chrome headless browser

You have to have plugin for the same. follow link for the same