10

In a project based on angular-seed project, I am running unit tests with ./scripts/test.sh --log-level debug but none of the log messages that I see are coming from my app. How do I get to see them? In my app, I am logging with $log.

jbasko
  • 7,028
  • 1
  • 38
  • 51

3 Answers3

15

Thanks. As mentioned, tests can inject console for $log using $provide. For posterity, $provide is not available via inject(function(...) { ... }) but instead must be injected into a function argument to module:

beforeEach(module('myapp', function($provide) {
  // Output messages
  $provide.value('$log', console);
}));
Carl G
  • 17,394
  • 14
  • 91
  • 115
  • 1
    Shouldn't @Carl get credit for this answer? I guess not, I didn't look at the time stamps. NM – Dave May 16 '15 at 20:34
  • Yes, I built on the earlier answer because it was not obvious to me how to properly override the `$log` service in a test. As mentioned here, `$provide` must be injected using `module`. – Carl G Jun 01 '16 at 18:15
12

Got it working! Had I used console.log directly it would have worked but now that I am using $log I had to patch it in a beforeEach (looks like by default it wasn't wired by angularjs):

$provide.value('$log', console);
jbasko
  • 7,028
  • 1
  • 38
  • 51
4

for clarity, you must structure it like this:

beforeEach(module('myapp'));

beforeEach(module('myapp', function($provide) {
  // Output messages
  $provide.value('$log', console);
})); 
doug31415
  • 275
  • 2
  • 9