如何访问量角器测试中加载到页面中的脚本 类?
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% 不正确的方法,导致无处可去。
我是量角器的新手 -- 访问在加载到被测试页面的脚本中定义的对象时遇到一些问题。
这是测试:
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% 不正确的方法,导致无处可去。