Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如何在Jasmine/量角器中模拟angular.module(';myModule';,[]).value()_Angularjs_Mocking_Jasmine_Protractor_Angularjs E2e - Fatal编程技术网

Angularjs 如何在Jasmine/量角器中模拟angular.module(';myModule';,[]).value()

Angularjs 如何在Jasmine/量角器中模拟angular.module(';myModule';,[]).value(),angularjs,mocking,jasmine,protractor,angularjs-e2e,Angularjs,Mocking,Jasmine,Protractor,Angularjs E2e,我尝试使用Gragrator的addMockModule()模拟一个简单的AngularJS模块并重写一个变量: 这是我的HTML: <body ng-app="myApp"> <div ng-controller="myAppController"> Overriden module value <b>{{myValue}}</b> </div> <script src="/S

我尝试使用Gragrator的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 newModule = angular.module('myModule', []);
newModule.value('myValue', "oldValue");
这是我的Jasmine/量角器代码:

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

怎么了


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

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

“在mockedModule中运行的代码以单独的方式运行 一个在浏览器中,一个在node.js中 “运行测试的进程”

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

});

这背后的想法是为活动环境设置常量,并仅为量角器测试而更改它们。它不起作用是正常的。使用ptor.ignoreSynchronization=true;您正在指定不测试角度页面。因此无需模拟。有关ignoreSynchronization属性的详细信息,请参见:
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");

});