【发布时间】:2017-01-20 11:54:29
【问题描述】:
我正在尝试设置测试,我们使用 Angular 1.5、TSify 和 Karma。我非常接近,但我遇到了一个我不太正确的问题:
我遵循此处描述的设置:https://github.com/cmlenz/tsify-test(此示例不包括角度)
我从 angular-mocks 得到一个错误:“无法设置未定义的属性 'mock'”
这必须是时间问题或范围问题——要么 angular-mocks 加载得太快,要么 browserify 正在包装 angular 变量的范围,而 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']
]
},
这一定与我加载模拟的方式有关——我的 Angular 应用程序不使用它,只是测试,所以这一定与它有关。
有什么提示吗?
【问题讨论】:
-
您的
files数组应包含所有 测试所需的文件。angular.js以及您的应用程序文件在哪里? -
从您的配置中,很明显
angular-mocks是随 NPM 一起安装的。如果angular也与 NPM 一起安装,并且通过.ts文件中的require包含在捆绑包中,则可能是问题所在,因为angular-mocks需要在angular之后加载。 -
@Phil Browserify 将所有文件(包括供应商文件)连接到一个包中。在我正在使用的示例中,他们只是在预处理器部分注册了 */.ts glob。如果这不正确,我可以改变它。应该是什么? (我假设我不必专门指向每个供应商文件,因为 browserify 正在将它们打包到包中)。
-
@cartant 你是对的——我们使用 NPM 作为供应商脚本,在我们的 typscript 中,我们正在导入模块并使用 CommonJS 编译器标志。然后,我们使用带有 tsify 插件的 browserify 来编译我们的 typscript,并为浏览器捆绑导入的供应商脚本。我认为我们要解决的问题是我没有在主应用程序的任何地方导入角度模拟。有没有办法为我的测试导入 angular-mocks,但不能在 prod 构建中导入它?
-
我会添加一个答案 - 主要是因为评论中的空间不足 - 但是,是的,有很多方法可以做到这一点。
标签: angularjs karma-runner browserify tsify