Ivan Paredes
Ivan Paredes

Reputation: 475

jasmine error when I inject a Factory

I ran a jasmine test over angular js, and i get the next error:

PhantomJS 2.1.1 (Linux 0.0.0) test_servicioCalculadora should provide a version FAILED /home/ivan/workspace/mobile.trackphone/www/lib/ionic/js/ionic.bundle.js:13218:53 forEach@/home/ivan/workspace/mobile.trackphone/www/lib/ionic/js/ionic.bundle.js:9168:24 loadModules@/home/ivan/workspace/mobile.trackphone/www/lib/ionic/js/ionic.bundle.js:13178:12 createInjector@/home/ivan/workspace/mobile.trackphone/www/lib/ionic/js/ionic.bundle.js:13104:22 workFn@/home/ivan/workspace/mobile.trackphone/www/lib/angular-mocks/angular-mocks.js:3074:60 loaded@http://localhost:9876/context.js:151:17

I tried to change the routes, inject other service, and it's not working too I ran other case like

it("compara un valor con otro", function () {
    var pi = 3.1415926,
      e = 2.78;

    expect(e).toBeLessThan(pi);
    expect(pi).not.toBeLessThan(e);
  });

and this's working fine.

This is my test file

describe("test_servicioCalculadora", function () {

  var calcu;

  beforeEach(module('starter'));

  it('should provide a version', inject(function(version) {
    expect(version).toEqual('v1');

  }));
});

my index.js is

var app = angular.module('starter', ['ionic', 'LocalStorageModule',      'btford.socket-io', 'angularMoment', 'ngCordova', 'ngAudio']);


app.value('version', 'v1');

my karma.config.js

module.exports = function(config) {
  config.set({
    basePath: '',
    frameworks: ['jasmine'],
    files: [

      '../www/lib/ionic/js/ionic.bundle.js',
      '../www/lib/angular-mocks/angular-mocks.js', 
      '../www/js/index.js',
      '../tests/**/*-test.js' 
    ],
    exclude: [
    ],
    preprocessors: {
    },
    reporters: ['progress'],
    port: 9876,
    colors: true,
    logLevel: config.LOG_ERROR,
    autoWatch: true,
    browsers: ['PhantomJS'],
    singleRun: false,
    concurrency: Infinity
  })
};

Upvotes: 0

Views: 112

Answers (1)

Hosar
Hosar

Reputation: 5292

You are trying to inject a value. Should be a service or a factory.
e.g.

beforeEach(module('some.service', function($provide){
            var log = {
                info: function(data){
                    console.log(data);
                }
            }
            $provide.value('$log', log);
});
beforeEach(inject(function(_serviceName_){
  serviceName = _serviceName_;
}));

it("Actual test", function(){
   serviceName.performAction();
});

See the example, first is the module where you can set some values. Then is the service or factory at the end the test.
This mean that the value of log will be injected on serviceName when is used on the actual test.
Hope this help to clarify.

Upvotes: 0

Related Questions