如果在使用Protractor并加载ngMockE2E进行模拟测试时,希望在构建时排除ngMockE2E
在使用yeoman的generator-angular构建的项目中,由于使用了grunt-wiredep,所以当尝试在E2E测试中使用angular-mocks时,需要将bower.json的devDependencies移动到dependencies中。
{
"name": "MyApp",
"version": "0.0.1",
"dependencies": {
"angular": "1.2.23",
"angular-resource": "1.2.23",
"angular-cookies": "1.2.23",
"angular-sanitize": "1.2.23",
"angular-animate": "1.2.23",
"angular-touch": "1.2.23",
"angular-ui-router": "~0.2.11",
"angular-i18n": "~1.2.23"
},
"devDependencies": {
"angular-mocks": "1.2.23" // dependenciesに移すと…
},
"overrides": {
"angular-i18n": {
"main": "angular-locale_ja-jp.js"
}
},
"appPath": "app"
}
然而,如果这样做,在测试时没有问题,但是当使用grunt build生成产品时,angular-mocks.js也会被合并和压缩在一起。
<!-- build:js(.) scripts/vendor.js -->
<!-- bower:js -->
<script src="bower_components/jquery/dist/jquery.js"></script>
<script src="bower_components/ng-file-upload-shim/angular-file-upload-shim.js"></script>
<script src="bower_components/angular/angular.js"></script>
<script src="bower_components/angular-resource/angular-resource.js"></script>
<script src="bower_components/angular-cookies/angular-cookies.js"></script>
<script src="bower_components/angular-sanitize/angular-sanitize.js"></script>
<script src="bower_components/angular-animate/angular-animate.js"></script>
<script src="bower_components/angular-touch/angular-touch.js"></script>
<script src="bower_components/angular-ui-router/release/angular-ui-router.js"></script>
<script src="bower_components/angular-i18n/angular-locale_ja-jp.js"></script>
<script src="bower_components/angular-mocks/angular-mocks.js"></script>
<!-- wiredepにより、ここに挿入されるので、一緒にまとめられてしまう!! -->
<!-- endbower -->
<!-- endbuild -->
当我搜索了一些好的方法后,发现确实存在这样一种方法。
所有(单元和端对端)测试的$httpBackend伪造
因此,以以下方式,不需要指定文件名,将angular-mocks.js包裹起来。
<!-- build:js(.) scripts/vendor.js -->
<!-- bower:js -->
<script src="bower_components/jquery/dist/jquery.js"></script>
<script src="bower_components/ng-file-upload-shim/angular-file-upload-shim.js"></script>
<script src="bower_components/angular/angular.js"></script>
<script src="bower_components/angular-resource/angular-resource.js"></script>
<script src="bower_components/angular-cookies/angular-cookies.js"></script>
<script src="bower_components/angular-sanitize/angular-sanitize.js"></script>
<script src="bower_components/angular-animate/angular-animate.js"></script>
<script src="bower_components/angular-touch/angular-touch.js"></script>
<script src="bower_components/angular-ui-router/release/angular-ui-router.js"></script>
<script src="bower_components/angular-i18n/angular-locale_ja-jp.js"></script>
<!-- endbower -->
<!-- endbuild -->
<!-- build:js -->
<script src="bower_components/angular-mocks/angular-mocks.js"></script>
<!-- endbuild -->
当进行测试时,可以正常使用模拟,并且在运行grunt build命令后,angular-mocks.js的部分会消失。