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

查看:15
本文介绍了如何在 Jasmine/Protractor 中模拟 angular.module('myModule', []).value()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 Protractor 的 addMockModule() 来模拟一个简单的 AngularJS 模块并覆盖一个变量:

I'm trying to use Protractor's addMockModule() to mock a simple AngularJS module and override a variable:

这是我的 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/量角器代码:

Here is my Jasmine/Protractor code:

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)/AssetAllocation/Index 中的端到端测试应覆盖通过模拟模块提供服务消息:预期oldValue"为newMockedValue".

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

怎么了?

到目前为止,我发现的所有示例都是覆盖 HTTP 调用,但我只想用一个简单的变量模拟一个非常简单的模块.量角器可以吗?

All samples I have found so far are to override HTTP calls, but all I want is to mock a very simple module with a simple variable. Is it possible to do in Protractor ?

推荐答案

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

According to Juliemr in this post:

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

" 在 mockedModule 中运行的代码在单独的来自测试的上下文.一个在浏览器中,一个在 node.js 中运行测试的进程"

" 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() 并启用角度同步

Put declaration of mockedValue inside it() and enable angular synchronization

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

});

这篇关于如何在 Jasmine/Protractor 中模拟 angular.module('myModule', []).value()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆