加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 使用带有Angular2和.ts规格的量角器时,“Reference

发布时间:2020-12-17 07:01:21 所属栏目:安全 来源:网络整理
导读:我想在Angular2中的hello world应用程序上进行e2e测试,并使用typescript编写规范.但是,量角器崩溃时出现以下消息: Using the selenium server at http://localhost:4444/wd/hub[launcher] Running 1 instances of WebDriver[launcher] Error: ReferenceErro
我想在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:Devd2ipmteste2eoverview.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%AppDataRoamingnpmnode_modulesprotractornode_modulesjasminelibjasmine.js:63:5
    at Array.forEach (native)
    at Jasmine.loadSpecs (C:Users%username%AppDataRoamingnpmnode_modulesprotractornode_modulesjasminelibjasmine.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
)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读