通过 Webpack(终端)执行 Typescript Jasmine 测试以测试 Angular2
Posted
技术标签:
【中文标题】通过 Webpack(终端)执行 Typescript Jasmine 测试以测试 Angular2【英文标题】:Executing Typescript Jasmine tests via Webpack (Terminal) to test Angular2 【发布时间】:2016-05-19 07:51:45 【问题描述】:目前我正在尝试让 Jasmine 与 Webpack 一起运行,以执行用 typescript 编写的测试来测试终端中的 Angular2 应用程序。
我昨天研究了哪些软件包可用于测试,虽然 angular2 有自己的方法 *1,但我寻找了推荐的 jasmine-core
或 jasmines 以外的其他工具本机包jasmine
。
我发现 jasmine-node
已经过时 2 年了。目前正在研究Webpack+Angular2 with Jasmine 测试包 *2
在阅读Become a Ninja with Angular2 *3 by Ninja Squad 之后,我对如何组合 3~5 个工具链没有满意的信息。
开始使用 Webpack 运行 Jasmine
然后我开始忽略打字稿,至少让 jasmine 和 webpack 一起工作。我找到了 Jasmine Webpack 插件 *4 并开始按照说明进行操作。
目前我一直坚持使用 webpack 来执行 Jasmine。 我添加了另一个入口点:
entry:
'vendor': './src/vendor.ts',
'main': './src/main.ts', // our angular app
'test': './src/spec.ts' // Testing with jasmine
,
我添加了 JasmineWebpackPlugin:
plugins.push(new jasmineWebpackPlugin());
现在我尝试将我的设置与 angular webpack starter pack 中的设置结合起来 *5
我只得到错误,无法再构建。
npm-debug.log 中的错误
14 verbose stack Exit status 1
14 verbose stack at EventEmitter.<anonymous> (C:\Program Files\nodejs\node_modules\npm\lib\utils\lifecycle.js:232:16)
14 verbose stack at emitTwo (events.js:100:13)
14 verbose stack at EventEmitter.emit (events.js:185:7)
14 verbose stack at ChildProcess.<anonymous> (C:\Program Files\nodejs\node_modules\npm\lib\utils\spawn.js:24:14)
14 verbose stack at emitTwo (events.js:100:13)
14 verbose stack at ChildProcess.emit (events.js:185:7)
14 verbose stack at maybeClose (internal/child_process.js:821:16)
14 verbose stack at Process.ChildProcess._handle.onexit (internal/child_process.js:211:5)
其他信息
节点版本:5.5.0
npm: 3.3.12
操作系统:Windows 7 64 位
我的依赖:
"dependencies":
"angular2": "2.0.0-beta.2",
"es6-promise": "^3.0.2",
"es6-shim": "^0.33.3",
"es7-reflect-metadata": "^1.4.0",
"rxjs": "5.0.0-beta.0",
"zone.js": "0.5.10"
,
"devDependencies":
"copy-webpack-plugin": "^0.3.3",
"css-loader": "^0.23.0",
"exports-loader": "0.6.2",
"expose-loader": "^0.7.1",
"file-loader": "^0.8.4",
"html-webpack-plugin": "^1.7.0",
"http-server": "^0.8.5",
"imports-loader": "^0.6.4",
"jasmine-core": "2.4.1",
"jasmine-webpack-plugin": "^0.1.1",
"json-loader": "^0.5.3",
"karma": "^0.13.15",
"karma-chrome-launcher": "^0.2.1",
"karma-coverage": "^0.5.3",
"karma-jasmine": "^0.3.6",
"karma-phantomjs-launcher": "^0.2.1",
"karma-sourcemap-loader": "^0.3.6",
"karma-webpack": "1.7.0",
"node.extend": "^1.1.3",
"phantomjs": "^1.9.18",
"phantomjs-polyfill": "0.0.1",
"protractor": "^3.0.0",
"raw-loader": "0.5.1",
"reflect-metadata": "0.1.2",
"rimraf": "^2.4.4",
"style-loader": "^0.13.0",
"ts-helper": "0.0.1",
"ts-loader": "^0.7.2",
"tsconfig-lint": "^0.4.3",
"tslint": "^3.2.0",
"tslint-loader": "^2.1.0",
"typedoc": "^0.3.12",
"typescript": "^1.7.3",
"typings": "^0.6.1",
"url-loader": "^0.5.6",
"webpack": "^1.12.9",
"webpack-dev-server": "^1.12.1",
"webpack-war-archiver-plugin": "0.0.1"
,
非常感谢您提前抽出宝贵时间。我尽我所能了解所有这些新工具,尤其是 webpack/jasmine。
> webpack-dev-server --config webpack-test-config.js --progress --profile --colors --display-error-details --display-cached --inline --debug
70% 1/1 build modules node_modules\webpack\lib\NormalModuleFactory.js:72
var elements = request.replace(/^-?!+/, "").replace(/!!+/g, "!").split("!");
^
TypeError: Cannot read property 'replace' of undefined
at node_modules\webpack\lib\NormalModuleFactory.js:72:26
at node_modules\webpack\lib\NormalModuleFactory.js:28:4
at node_modules\webpack\lib\NormalModuleFactory.js:159:3
at NormalModuleFactory.applyPluginsAsyncWaterfall (node_modules\tapable\lib\Tapable.js:75:69)
at NormalModuleFactory.create (node_modules\webpack\lib\NormalModuleFactory.js:144:8)
at node_modules\webpack\lib\Compilation.js:214:11
at node_modules\webpack\node_modules\async\lib\async.js:181:20
at Object.async.forEachOf.async.eachOf (node_modules\webpack\node_modules\async\lib\async.js:233:13)
at Object.async.forEach.async.each (node_modules\webpack\node_modules\async\lib\async.js:209:22)
at Compilation.addModuleDependencies (node_modules\webpack\lib\Compilation.js:185:8)
npm ERR! Windows_NT 6.1.7601
npm ERR! argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "run" "jasmine"<
npm ERR! node v5.5.0
npm ERR! npm v3.3.12
npm ERR! code ELIFECYCLE
npm ERR! jasmine: `webpack-dev-server --config webpack-test-config.js --progress --profile --colors --display-error-details --display-cached --inline --debug`
npm ERR! Exit status 1
不能发布超过 2 个链接,所以我在这里列出链接。
*1:angular.io/docs/ts/latest/testing/jasmine-testing-101.html
*2:angularclass.github.io/angular2-webpack-starter/
*3:books.ninja-squad.com/angular2
*4:github.com/iredelmeier/jasmine-webpack-plugin
*5:github.com/AngularClass/angular2-webpack-starter/blob/master/webpack.test.config.js
【问题讨论】:
检查这个以使测试与 webpack 一起工作 -> github.com/AngularClass/angular2-webpack-starter 我已经尝试过该配置,但它看起来不起作用: 【参考方案1】:我再次查看了 angular2 - webpack 入门工具包。 在我为测试创建了一个额外的文件并复制了 spec-bundle.js 之后它就起作用了,这非常重要!
我必须学习的另一件事是,单靠茉莉花是做不到的。 Karma 是用于管理启动测试所需的所有任务的工具。
包括: 设置 PhantomJS, 指导 webpack 编译 typescript 文件 启动伊斯坦布尔 执行茉莉花
【讨论】:
有机会把你的结果放到github上吗?我有兴趣参与,因为我正在寻找 Ionic2 的类似配置,因为它也使用 angular2/typescript/webpack 您好!我一有时间就会把它放上来。我会回复你的。 同时,您可以观看github.com/martinmuzatko。感谢您的关注。 其实我已经开始尝试做类似的事情了。我认为执行业力服务器的简单 webpack 插件应该足够了。现在我面临一些不直接相关的问题***.com/questions/35597719/…【参考方案2】:似乎 NormalModuleFactory.js:72 错误与 webpack 配置文件名中的破折号有关。用点替换它们应该可以解决问题。
【讨论】:
以上是关于通过 Webpack(终端)执行 Typescript Jasmine 测试以测试 Angular2的主要内容,如果未能解决你的问题,请参考以下文章