如何访问量角器测试中加载到页面中的脚本 类?

How to access scripted classes loaded into a page inside Protractor tests?

我是量角器的新手 -- 访问在加载到被测试页面的脚本中定义的对象时遇到一些问题。

这是测试:

describe('test SortedMap', function() {

    beforeEach(function() {
      browser.get('index.html');

    })

    it('should be initialized with zero elements', function() {
      let sm = new SortedMap();
      expect(sm.count).toEqual(0);
    });
  });

这是我为此页面制作的 SortedMap class 的一个小单元测试。 SortedMap class 定义在正文末尾由 index.html 加载的脚本中。虽然此页面的 angular 控制器能够正确访问 SortedMap class,但量角器测试失败并在 let sm = new SortedMap() 上出现引用错误,我似乎无法在我的量角器中访问它测试。

这是索引页:

<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>My AngularJS App</title>
  <meta name="description" content="">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="lib/html5-boilerplate/dist/css/normalize.css">
  <link rel="stylesheet" href="lib/html5-boilerplate/dist/css/main.css">
  <link rel="stylesheet" href="app.css">
  <script src="lib/html5-boilerplate/dist/js/vendor/modernizr-2.8.3.min.js"></script>
</head>
<body>
  <ul class="menu">
    <li><a href="#!/view1">view1</a></li>
    <li><a href="#!/view2">view2</a></li>
  </ul>

  <!--[if lt IE 7]>
      <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
  <![endif]-->

  <div ng-view="view1"></div>

  <div>AngularJS seed app: v<span app-version></span></div>

  <!-- In production use:
  <script src="//ajax.googleapis.com/ajax/libs/angularjs/x.x.x/angular.min.js"></script>
  -->
  <script src="lib/angular/angular.js"></script>
  <script src="lib/angular-route/angular-route.js"></script>
  <script src="classes/classes.js"></script>  // **<---The ES6 class SortedMap is defined in this script**
  <script src="app.js"></script>
  <script src="fringe/fringes_template.js"></script>
  <script src="fringe/fringes.js"></script>
  <script src="view1/view1.js"></script>
  <script src="view2/view2.js"></script>
  <script src="core/version/version.js"></script>
  <script src="core/version/version-directive.js"></script>
  <script src="core/version/interpolate-filter.js"></script>
</body>
</html>

Protractor 的目的是从用户的角度测试应用程序,这意味着像真实用户一样(单击按钮、浏览页面、检查页面上呈现的元素是否正确)。

如果您想直接访问某些功能,这不是 Protractor 的本意,而是单元测试的问题,例如业力等

因此,您可能应该重新考虑您的测试用例场景。

更新: 基本上,问题是您的 class 没有加载到量角器上下文中,您必须通过 node.js 作为模块 see example 加载此模块。但是 new SortedMap() 实例不会引用之前通过 html script 标记包含的模块。它将是 SortedMap 的全新实例。

毕竟,如果你仍然想访问完全相同的实例,我认为这是不可能的,即使是这样,那也是 100% 不正确的方法,导致无处可去。