我想在Angular2中的hello world应用程序上进行e2e测试,并使用typescript编写规范.但是,量角器崩溃时出现以下消息:
Using the selenium server at http://localhost:4444/wd/hub [launcher] Running 1 instances of WebDriver [launcher] Error: ReferenceError: System is not defined at Object.<anonymous> (C:\Dev\d2ipm\test\e2e\overview.js:1:1) at Module._compile (module.js:413:34) at Object.Module._extensions..js (module.js:422:10) at Module.load (module.js:357:32) at Function.Module._load (module.js:314:12) at Module.require (module.js:367:17) at require (internal/module.js:16:19) at C:\Users\%username%\AppData\Roaming\npm\node_modules\protractor\node_modules\jasmine\lib\jasmine.js:63:5 at Array.forEach (native) at Jasmine.loadSpecs (C:\Users\%username%\AppData\Roaming\npm\node_modules\protractor\node_modules\jasmine\lib\jasmine.js:62:18) [launcher] Process exited with error code 100
由于我默认使用SystemJS作为Angular2建议,因此System包含在每个已编译的.js文件中,包括测试规范.我的index.html按照教程中的建议配置系统,应用程序可以运行:
<script src="node_modules/es6-shim/es6-shim.min.js"></script> <script src="node_modules/systemjs/dist/system-polyfills.js"></script> <script src="node_modules/angular2/bundles/angular2-polyfills.js"></script> <script src="node_modules/systemjs/dist/system.src.js"></script> <script src="node_modules/rxjs/bundles/Rx.js"></script> <script src="node_modules/angular2/bundles/angular2.dev.js"></script> <!-- 2. Configure SystemJS --> <script> System.config({ packages: { app: { format: 'register',defaultExtension: 'js' } },globalEvaluationScope: false }); System.import('app/boot') .then(null,console.error.bind(console)); </script>
用纯JS编写的运行测试工作正常.如何让我的测试环境看到系统?
解决方法
当您通过Protractor运行e2e测试时,实际上有两种环境:
>首先是正在测试的环境
>它在浏览器中运行,
>说浏览器是通过“Selenium Webdriver”自动化系统控制的,
>它作为最终使用的浏览器加载并执行整个应用程序,包括加载index.html文件.
>第二个是运行测试的环境
>在作为本地node.js应用程序运行时,
>它使用量角器,它运行Jasmine,运行e2e测试文件
>它通过Selenium控制浏览器
即使您在index.html文件中加载库,您的e2e-spec文件也无法访问它们.这包括systemjs.当Typescript编译器使用“module”时,这是一个问题:“system”
怎么解决?
一种解决方案是配置构建过程,以便使用“module”:“commonjs”选项编译e2e-spec文件.如果您希望能够将Web应用程序中的文件导入到测试规范中,则必须对整个应用程序进行两次编译(尽管我不确定有多少用例可以这样做).
例如,使用gulp
const gulpTypings = require('gulp-typings') const sourcemaps = require('gulp-sourcemaps') const ts = require('gulp-typescript') const tsProject = ts.createProject('tsconfig.json') const tsProjectE2E = ts.createProject('tsconfig-e2e.json') const tsFiles = [ 'typings/index.d.ts','app/**/*.ts','!**/*.e2e-spec.ts','!node_modules/**/*' ] const tsFilesE2E = [ 'typings/index.d.ts','app/**/*.e2e-spec.ts',// You should not need that unless you use your app files in your tests '!node_modules/**/*' ] gulp.task('typings',() => gulp .src('./typings.json') .pipe(gulpTypings()) ) gulp.task('ts',['typings'],() => gulp .src(tsFiles) .pipe(sourcemaps.init()) .pipe(ts(tsProject)) .js .pipe(sourcemaps.write('.')) .pipe(gulp.dest('app')) ) gulp.task('ts-e2e',() => gulp .src(tsFilesE2E) .pipe(sourcemaps.init()) .pipe(ts(tsProjectE2E)) .js .pipe(sourcemaps.write('.')) .pipe(gulp.dest('e2e')) // Note that your compiled tests files are put in the e2e/ folder Now )
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。