无法使量角器-html模拟工作,抛出错误"模块' httpMock'不可用!"

时间:2015-03-13 12:02:40

标签: protractor

我正在尝试使用" protractor-http-mock"来模拟http响应。

这就是我在测试中使用它的方法

var mock = require('protractor-http-mock');
beforeEach(function() {
        mock([{
            request: {
                path: 'api/account/activate',
                method: 'PUT',
                //status: 204
            },
            response: {
                //data: {},
                status: 204
            }
        }]);
    });

expect(mock.requestsMade()).toEqual([
       { url : '/api/account/activate', method : 'PUT' }
    ]);

当我运行我的测试时它说 - UnknownError:javascript error:[$ injector:nomod] Module' httpMock'不可用!您要么错误拼写了模块名称,要么忘记加载它。如果注册模块,请确保将依赖项指定为第二个参数。

此外,当我删除期望部分时,它不会抱怨任何事情,但也不会嘲笑任何事情。

有更多知识的人能帮忙吗?我不想使用 - ngMockE2E,有没有第三种方法呢?

1 个答案:

答案 0 :(得分:1)

mock()未被调用时,我能够重现该问题,但是mock.teardown()。在您的情况下,您应该将tearDown()放入afterEach()

beforeEach(function() {
    mock([{
        request: {
            path: 'api/account/activate',
            method: 'PUT',
        },
        response: {
            //data: {},
            status: 204
        }
    }]);

    browser.ignoreSynchronization = true;
    browser.get('/');
    // wait before we get past loading stage, this together with ignoreSynchronization seems be a valid workaround for manually //boostrapping Angular when running Protractor
    browser.driver.wait(function () {
        return browser.driver.getCurrentUrl().then(function (url) {
            return /\/\w+-\w+\//.test(url);
        });
    });
});

afterEach(function () {
    mock.teardown();
});

此外,很少有注意事项可以在这里提供帮助:

  • 您的量角器配置应定义mocks

    mocks: {
        dir: "mocks",  // path to directory with mocks
        default: []
    },
    
  • 在量角器配置的onPrepare()
  • ,设置.config

    require("protractor-http-mock").config = {
        rootDirectory: __dirname,
        protractorConfig: "protractor.conf.js"  // name of the config here
    };