【问题标题】:jasmine error when I inject a Factory注入工厂时出现茉莉花错误
【发布时间】:2016-11-21 19:46:57
【问题描述】:

我在 Angular js 上运行了 jasmine 测试,我得到下一个错误:

PhantomJS 2.1.1 (Linux 0.0.0) test_servicioCalculadora 应该提供 一个版本失败 /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 已加载@http://localhost:9876/context.js:151:17

我尝试更改路由,注入其他服务,但它也不起作用 我跑了其他案例,例如

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

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

这一切正常。

这是我的测试文件

describe("test_servicioCalculadora", function () {

  var calcu;

  beforeEach(module('starter'));

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

  }));
});

我的 index.js 是

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


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

我的 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
  })
};

【问题讨论】:

  • 您正在注入一个具有太多依赖项的模块,可能其中一个无法注入。创建一个没有其他注入的非常简单的模块并在您的测试中使用它,如果它有效,那么其中一个依赖项就是问题所在。
  • 我试过了,但是没用
  • PhantomJS 以吞下 beforeEach 中发生的错误而闻名。改成 Chrome 进行调试。

标签: javascript angularjs ionic-framework jasmine karma-jasmine


【解决方案1】:

您正在尝试注入一个值。应该是服务或工厂。
例如

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();
});

看例子,首先是你可以设置一些值的模块。然后是服务或工厂最后的测试。
这意味着在实际测试中使用 log 的值将被注入到 serviceName 上。
希望这有助于澄清。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    • 2017-01-15
    相关资源
    最近更新 更多