gpt4 book ai didi

javascript - 如何断言已调用后端端点?

转载 作者:行者123 更新时间:2023-12-03 13:18:27 25 4
gpt4 key购买 nike

我正在使用 Protractor 构建 Angular 应用程序的 E2E 测试。后端 HTTP 服务正在使用 $httpBackend 进行模拟。到目前为止,测试看起来像这样:

describe('foo', function () {
it('bar', function () {
var backendMockModule = function () {
angular
.module('backendMock', [])
.run(['$httpBackend', function ($httpBackend) {
$httpBackend.whenPUT('http://localhost:8080/services/foo/bar')
.respond(function (method, url, data, header) {
return [200, {}, {}];
});
}]);
};
browser.addMockModule('backendMock', backendMockModule);

browser.get('http://localhost:8001/#/foo/bar');

element(by.id('baz')).click();

// here I would like to assert that the Angular app issued a PUT to '/foo/bar' with data = {...}
});
});

测试比这更详细一些,它测试界面和其他东西的乐观更新。但是我认为这与这个问题无关,所以我删除了其他部分。测试本身运行良好,我能够检查界面上的元素是否符合预期。我没有发现的是:

如何断言已使用正确的数据、方法、 header 等调用后端 HTTP 端点?

我试过这样做(添加 hasBeenCalled 变量):

describe('foo', function () {
it('bar', function () {
var hasBeenCalled = false;

var backendMockModule = function () {
angular
.module('backendMock', [])
.run(['$httpBackend', function ($httpBackend) {
$httpBackend.whenPUT('http://localhost:8080/services/foo/bar')
.respond(function (method, url, data, header) {
hasBeenCalled = true;
return [200, {}, {}];
});
}]);
};
browser.addMockModule('backendMock', backendMockModule);

browser.get('http://localhost:8001/#/foo/bar');

element(by.id('baz')).click();

expect(hasBeenCalled).toBeTruthy();
});
});

但它不起作用。我不确切知道 Protractor 是如何进行测试的,但我想它会在调用 addMockModule 时将函数的序列化版本发送到浏览器,而不是在与网页等我无法在测试和浏览器之间共享状态(附带问题:是否正确?)。

最佳答案

在 expect(...)... 之前需要 $httpBackend.flush()

关于javascript - 如何断言已调用后端端点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29124364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com