我正在使用Protractor为Angular 1.5应用程序创建端到端测试。该应用程序允许用户通过使用标准input type="file"
控件和submit
按钮选择文件,将文件上载到后端Web API。我有一个基本上像这样的控制器:
function exampleController() {
var vm = this;
vm.status = "";
vm.buttonClickHandler = buttonClickHandler;
function buttonClickHandler() {
vm.status = "calling";
service.makeAsyncCall()
.then(function() {
vm.status = "success";
}, function() {
vm.status = "error";
});
}
}
当用户点击buttonClickHandler
按钮时,系统会调用submit
。
如何使用Protractor编写端到端测试,以验证当用户单击按钮时状态更改为“调用”,然后在promise解析时更改为“成功”?
在我的大多数尝试中,我都可以验证vm.status
已设置为“成功”,或如果我设置{{{},我可以验证它是否设置为“调用” 1}},但后者 only 在我的Web API后端调用中构建一个人工延迟时起作用,否则该过程显然太快而且值会显示“成功”。
答案 0 :(得分:1)
这是相当丑陋,片状,这是一个不好的做法,但无论如何我都会尝试:)
it('click test', function () {
$('button').click();
browser.wait(function () {
// Polls 'as fast as possible' until it evalutes to truthy value
// This might be flaky if 'calling' status is shorter than
// 1 polling interval (whose length can't be determined)
return $('div_containing_status').getText().then(function (status) {
return /calling/.test(status);
});
}, 10000);
expect($('div_containing_status').getText()).toBe('calling');
browser.wait(function () {
return $('div_containing_status').getText().then(function (status) {
return /success/.test(status);
});
}, 10000);
expect($('div_containing_status').getText()).toBe('success');
});
更新:根据@alecxe评论修改了有关投票的信息