使用 ngMockE2E 模拟 httpBackend 量角器不起作用



遵循此处描述的基本准则https://www.npmjs.com/package/ng-mock-e2e

但仍然调用正常的 REST 调用。

'use strict'
var HttpBackend = require('httpbackend');
var backend = null;
var Injector = require('./helpers/injector');
var ngMockE2E = require('ng-mock-e2e');
var $httpBackend = ngMockE2E.$httpBackend;
describe("Login", function () {
    var loginJsonStub,
        loginPage = require('./pageObjects/LoginPage.js');
    beforeEach(function () {
        browser.get('http://localhost:9001/#');
        var injector = new Injector();
        injector.get('loginJson').then(function (result) {
            loginJsonStub = result;
        })
    });
    beforeEach(function () {
        ngMockE2E.addMockModule();
        ngMockE2E.addAsDependencyForModule('myApp');
        ngMockE2E.embedScript('../../app/bower_components/angular-mocks/angular-mocks.js');
    });
    afterEach(function () {
        ngMockE2E.clearMockModules();
    });
    describe("Routing", function () {
        it('should redirect to answerset page immediately if only 1 project', function () {
            $httpBackend.when('POST', '/authentication/login').respond({data: 123});
            element(by.id('userName')).sendKeys('xx\svijver');
            element(by.id('passWord')).sendKeys('password');
            //browser.pause();
            loginPage.nextButton.click();
            browser.getLocationAbsUrl();
            expect(browser.getCurrentUrl()).toContain('answersets/1');
            expect(browser.getCurrentUrl()).toBe('answersets/1');
            browser.pause();
        });
    });
});

这应该不难,有人可以指出我忽略了什么吗?尝试了其他几个第三方供应商来模拟httpBackd,但无法使其工作。也许实际应用程序中的初始$http调用正在推翻模拟的调用?

--编辑--

根据 Angular 文档,将 ngMockE2e 依赖项添加到我的主应用程序中angular.module('qApp', ['...', '...', '...', 'ngMockE2E']);会导致各种奇怪的错误:

错误:意外请求:获取 http://qubus7.test.kmsgroep.com/api/localizations/en2 预计不会再有请求 在$httpBackend(角度模拟.js:1263)

Uncaught SyntaxError: Unexpected identifier
angular.js:78 Uncaught Error: [$injector:nomod] Module 'qubusApp' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.
         http://errors.angularjs.org/1.2.26/$injector/nomod?p0=qubusApp(anonymous function) @ angular.js:78(anonymous function) @ angular.js:1677ensure @ angular.js:1601module @ angular.js:1675(anonymous function) @ MainController.js:4
angular.js:78 Uncaught Error: [$injector:nomod] Module 'qbs.models' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.
    http://errors.angularjs.org/1.2.26/$injector/nomod?    p0=qbs.models(anonymous function) @ angular.js:78(anonymous function) @ angular.js:1677ensure @ angular.js:1601module @ angular.js:1675(anonymous function) @ loginModel.js:3
angular.js:78 Uncaught Error: [$injector:nomod] Module 'qbs.models' is not   available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.

当 runnin 量角器时,它突然看到对我的 UI 元素的引用,这是有道理的,因为它不再加载。

首先,似乎您使用的是ng-mock-e2e的旧独立版本。您应该在 angular: https://docs.angularjs.org/api/ngMockE2E 的角度模拟中使用版本

项目中包含角度模拟后,可以在测试文件中添加以下内容:

beforeEach(function () {
    // choose a unique name for your mock-module, like httpMocker
    browser.addMockModule('httpMocker', function () {
        angular.module('httpMocker', ['ngMockE2E'])
            .run(function ($httpBackend) {
                // define your routes
            });
        );
    });
});

最新更新