如何在 Jasmine/Protractor 中模拟 angular.module('myModule', []).value()

2023-12-03

我正在尝试使用 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");

这是我的茉莉花/量角器代码:

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");

    });

Results:

失败:

1) /AssetAllocation/Index 中的端到端测试应覆盖 通过模拟模块提供服务消息: 预期“oldValue”为“newMockedValue”。

怎么了 ?

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


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

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

“在模拟模块中运行的代码在单独的模块中运行 测试中的上下文。一种是在浏览器中,一种是在node.js中 运行测试的过程“

放置声明mockedValue inside 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");

});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Jasmine/Protractor 中模拟 angular.module('myModule', []).value() 的相关文章

随机推荐