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

Angularjs 使用';在一个测试中添加多个模拟模块;addMockModule';,angularjs,protractor,httpbackend,ngmocke2e,Angularjs,Protractor,Httpbackend,Ngmocke2e,我在用量角器模拟一个有角度的网站上的一些端点,使用以下模式: // mock.js // adding the mock module and passing it data Mock.prototype.all = { default: function() { browser.addMockModule('httpBackendMock', mockModules.all, { data: data }) } } // mockmod

我在用量角器模拟一个有角度的网站上的一些端点,使用以下模式:

// 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();

尝试将其添加到一个单独的模块中,并在调用所有其他模块后调用它,但仍然不起作用。有什么想法吗?

由于两个模拟模块都使用相同的模块名称标识符,
httpBackendMock
,因此这是正常工作的。您可以使用唯一的名称,然后最新模块将不会覆盖其他模块。

很抱歉造成混淆。allDefault和allUser页面对象实际上具有唯一的模块名称标识符,例如:angular.module('allU')和angular.module('allD')。编辑了主要问题以反映这一点。还是不知道问题出在哪里。。。我也错了,只有最后一个模拟是有效的,实际上它们都不起作用(当我使用相同的模块名称进行测试时,最后一个模拟是有效的)