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

angularjs – 如何在Jasmine / Protractor中模拟angular.module(

发布时间:2020-12-17 17:45:33 所属栏目:安全 来源:网络整理
导读:我正在尝试使用Protractor的addMockModule()来模拟一个简单的AngularJS模块并覆盖一个变量: 这是我的HTML: body ng-app="myApp" div ng-controller="myAppController" Overriden module value b{{myValue}}/b /div script src="/Scripts/Lib/angular/angul
我正在尝试使用Protractor的addMockModule()来模拟一个简单的AngularJS模块并覆盖一个变量:

这是我的HTML:

<body ng-app="myApp">
    <div  ng-controller="myAppController">    
        Overriden module value <b>{{myValue}}</b>
    </div>

    <script src="/Scripts/Lib/angular/angular.js"></script>
    <script src="/module.js"></script>
    <script src="/controller.js"></script>
</body>

这是我的控制器:

var myApp = angular.module("myApp",['myModule']);

myApp.controller("myAppController",function ($scope,myValue) {
    $scope.myValue = myValue;
});

这是我的模块:

var newModule = angular.module('myModule',[]);
newModule.value('myValue',"oldValue");

这是我的Jasmine / Protractor代码:

var mockMyModule = function () {
        var newModule = angular.module('myModule',[]);
        newModule.value('myValue',"newMockedValue");
    };

    it('should override services via mock modules',function () {

        ptor = protractor.getInstance();
        ptor.ignoreSynchronization = true;
        browser.addMockModule('portfolioDataAccessMod',mockMyModule);
        browser.get('http://localhost:57627/page1.html');

        expect(element(by.binding("myValue")).getText()).toBe("newMockedValue");

    });

结果:

失败:

1) End-to-end test in /AssetAllocation/Index should override
services via mock modules Message:
Expected ‘oldValue’ to be ‘newMockedValue’.

怎么了 ?

到目前为止我找到的所有示例都是覆盖HTTP调用,但我想要的只是用一个简单的变量来模拟一个非常简单的模块.在Protractor中可以做到吗?

解决方法

根据Juliemr在这篇文章中的说法:

https://github.com/angular/protractor/issues/509

” the code that is run in the mockedModule is run in a separate
context from the test. One is in the browser,one is in the node.js
process running the test “

将mockedValue声明放在it()中并启用角度同步

it('should override services via mock modules',function () {
    ptor = protractor.getInstance();

    // When ignoreSynchronization is true mocking doesn't work
    ptor.ignoreSynchronization = false; 

    browser.addMockModule('myModule',function () {
        var module = angular.module('myModule').config(['$provide',function ($provide) {
            $provide.constant('myValue','newMockedValue');
        }])
    });

    browser.get('http://localhost:57627/page1.html');
    expect(element(by.binding("myValue")).getText()).toBe("newMockedValue");

});

(编辑:李大同)

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

    推荐文章
      热点阅读