我正在尝试使用" 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,有没有第三种方法呢?
答案 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
};