1

我正在尝试设置测试,我们使用 Angular 1.5、TSify 和 Karma。我非常接近,但我遇到了一个我不太正确的问题:

我正在遵循此处描述的设置:https ://github.com/cmlenz/tsify-test (此示例不包括角度)

我从 angular-mocks 收到一个错误:“无法设置未定义的属性 'mock'”

这必须是时间问题或范围问题 - 角度模拟加载得太快,或者浏览器正在包装角度变量的范围,而模拟看不到它。不知道。

以下是我的 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']
        ]
    },

这一定与我加载模拟的方式有关——我的角度应用程序不使用它,只是测试,所以这一定与它有关。

有什么提示吗?

4

1 回答 1

1

angular-mocks需要在您当前的 Karma 配置之后angular并使用您的当前 Karma 配置加载,这不会发生 -angular直到.ts您的.spec.ts文件之一所依赖的文件之一需要它时才会加载。

一种解决方案是添加一个需要两者的附加文件,angularangular-mocks确保该文件位于.spec.tsKarmafiles配置中的文件之前。

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

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

并且可以添加到 Karma 配置中(替换angular-mocksunder node_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配置中添加另一个条目。

于 2016-09-13T21:29:16.123 回答