2016-09-13 65 views
1

我试图设置测试,我们在哪里使用Angular 1.5,TSify和Karma。我非常接近,但我运行到,我还没有完全得到正确的问题:Angular,Karma,tsify,woes

我下面这里所描述的设置:https://github.com/cmlenz/tsify-test(这个例子不包括角)

我收到一个错误angular-mocks:“不能设置属性'模拟'的未定义”

这必须是一个时间的事情或范围的事情 - 无论角度嘲笑加载太快,或browserify是包含角度变量的范围,并且嘲笑无法看到它。不知道。

这里是我的karma.conf.js文件的相关部分:

frameworks: ['browserify', 'jasmine'], 

    files: [ 
     'https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js', 
     './node_modules/angular-mocks/angular-mocks.js', 
     './modules/**/*.spec.ts' 
    ], 

    exclude: [], 

    preprocessors: { 
     '**/*.ts': 'browserify' 
    }, 

    browserify: { 
     debug: true, 
     plugin: [ 
      ['tsify'] 
     ] 
    }, 

这必须是与我加载嘲弄的方式 - 它不使用我的角度的应用程序,只需测试,所以必须与它有关。

任何提示? angular后加上当前噶configuarion要加载

+1

你的'files'数组应该包含** all **所需的测试文件。 'angular.js'以及你的应用程序文件在哪里? – Phil

+1

从您的配置中,很显然'角模拟'与NPM一起安装。如果'angular'也与NPM一起安装,并且在'.ts'文件中通过'require'包含在捆绑包中,那很可能是问题,因为'angular-mocks'需要在'angular'之后加载。 – cartant

+0

@Phil Browserify将所有文件(包括供应商文件)连接成一个包。在我工作的例子中,他们只是在预处理器部分注册了**/*。ts glob。如果那不对,我可以改变它。它应该是什么? (我假设我不应该特别指向每个供应商文件,因为browserify会将这些文件打包到捆绑包中)。 – JMarsch

回答

1

angular-mocks需求,即没有发生 - angular,直到它在.ts文件赖以您.spec.ts文件之一是依赖一个人的需要没有被加载。

一个解决办法是补充一点,既需要angularangular-mocks并确保文件先于因果报应的files配置.spec.ts文件的附加文件。

例如,一个名为require-angular-mocks.js文件可以创建:

require('angular'); 
require('angular-mocks'); 

而且可以添加到噶配置(更换angular-mocksnode_modules):

files: [ 
    'https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js', 
    './require-angular-mocks.js', 
    './modules/**/*.spec.ts' 
], 

preprocessors: { 
    '**/*.js': 'browserify', 
    '**/*.ts': 'browserify' 
}, 

这应该确保angularangular-mocks按正确的顺序加载并在规格之前加载。请注意,如果它是.js文件,则需要在Karma的preprocessors配置中使用另一个条目。

+0

被拉下了任务,刚刚来试试这个。有效!那太棒了!感谢您的帮助。我想了解更多关于业力渠道如何运作的信息。你知道这件事吗? – JMarsch

+0

不幸的是,不,我不知道Karma有什么有用的写法。我想通过阅读[配置文档](http://karma-runner.github.io/1.0/config/configuration-file.html)来逐步增加我的理解,以解决手边的问题。关键是['files'](http://karma-runner.github.io/1.0/config/files.html)设置。 Karma使用它来构建它提供的HTML文件。 Browserify必须通过将'files'中的'.js'条目减少为包含在'