使用'addMockModule'在一个测试中添加多个模拟模块

时间:2015-09-07 13:26:11

标签: angularjs protractor httpbackend ngmocke2e

我正在使用以下模式在Protular的Angular网站上嘲笑一些终点:

// mock.js
// adding the mock module and passing it data
Mock.prototype.all = {
    default: function() {
      browser.addMockModule('httpBackendMock', mockModules.all, {
        data: data
      })
    }
}

// mockmodules.js
// add dependencies to module and inject it
exports.all = function() {

    $httpBackend.whenGET(/user/).respond(function() {
        return [200, data.mockData.data];
    });    

    $httpBackend.whenGET(/.*/).passThrough();
    $httpBackend.whenPOST(/.*/).passThrough();

    angular.module('httpBackendMock' ['ngMockE2E', 'sportsbook-app'])
        .value('data', {
            'mockData': arguments[0],
            'count': 0
        })
        .run(runBlock);
        runBlock.$inject = ['$httpBackend', 'data', 'eventDataSourceManager'];  
}

// test-spec.js
// call mock from test
it("Mock", function() {

    mock.all.default();
});

现在这很好用,但我想通过让所有发送不同数据的多个模块来添加更多模块。例如:

Mock.prototype.all = {
    default: function() {
      browser.addMockModule('httpBackendMock', mockModules.allDefault, {
        data: data
      })
    },
    user: function() {
      browser.addMockModule('user', mockModules.allUser, {
        userData: userData
      })
    }
}

it("Mock", function() {

    mock.all.default();
    mock.all.user();
});

像这样,没有一个模拟器似乎在工作。

同样在selenium服务器中,我可以看到正在找到两个模块的名称:

Executing: [execute script: angular.resumeBootstrap(arguments[0]);, [[protractorBaseModule_, httpBackendMock, user]]])

起初我认为问题出在

$httpBackend.whenGET(/.*/).passThrough();
$httpBackend.whenPOST(/.*/).passThrough();

尝试将此添加到单独的模块并在调用所有其他模块后调用它,但仍然无效。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这是按预期工作的,因为两个模拟模块都使用相同的模块名称标识符<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> <div class="carousel-inner" style="position: relative;"> <div class="item"> <img src="http://web.ccpgamescdn.com/newssystem/media/67432/1/100_-Twitter.jpg" alt=""> <a class="overlay" style="position: absolute; top: 0%; left: 0%; width: 101.4%; height: 103.31491712707%;" href="domain.com" title=""> </a> </div> <div class="item active"> <img src="http://www.elcomcms.com/Images/UserUploadedImages/664/facebookicon_100x100.jpg" alt=""> <a class="overlay" style="position: absolute; top: 0%; left: 0%; width: 100.8%; height: 102.76243093923%;" href="domain.com/one.html" title=""> </a> </div> </div>。您可以使用唯一的名称,然后最新的模块不会覆盖其他模块。