Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在承诺解决前后验证值?_Javascript_Angularjs_Promise_Protractor - Fatal编程技术网

Javascript 如何在承诺解决前后验证值?

Javascript 如何在承诺解决前后验证值?,javascript,angularjs,promise,protractor,Javascript,Angularjs,Promise,Protractor,我正在使用量角器为Angular 1.5应用程序创建端到端测试。应用程序允许用户通过使用标准input type=“file”控件和submit按钮选择文件,将文件上载到后端Web API。我有一个控制器,其基本行为如下: function exampleController() { var vm = this; vm.status = ""; vm.buttonClickHandler = buttonClickHandler; function butto

我正在使用量角器为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";
               });
    }
}
当用户单击
submit
按钮时,将调用
按钮ClickHandler

如何使用量角器编写端到端测试,以验证当用户单击按钮时状态是否更改为“调用”,然后在承诺解决时状态是否更改为“成功”


在我的大多数尝试中,我可以验证
vm.status
是否已设置为“success”、如果我设置
ignoreSynchronization=true
,我可以验证它是否设置为“calling”,但后者只有在我在Web API后端调用中构建人工延迟时才起作用,否则,这个过程显然太快了,值会显示“成功”。

这是一个相当丑陋、不可靠的做法,但我还是会尝试一下:)


更新:根据@alecxe comment编辑的轮询信息

UI端是否有任何指示显示
状态
更改?@alecxe是的,UI正确显示了我想要的
状态
更改。我似乎无法在自动测试中捕获它们,明白了。是否有一个带有状态文本或加载微调器的元素,我们可以检查它,而不是访问控制器中的字段?谢谢。当然,状态只是绑定到一个div,如:
{{vm.status}
,我在量角器中使用
元素(by.binding(“vm.status”)
访问它,它给出了正确的元素。实际上。但我理解你的想法,我想知道这是否能可靠地工作。谢谢。很有趣,我想知道500毫秒的信息来自哪里:)。我一直认为它是500毫秒,但我只是测试了它和浏览器。wait()确实很少轮询:23:15:18.976 INFO-Executing:[获取当前url])23:15:18.990 INFO-Done:[获取当前url]23:15:18.997 INFO-Executing:[获取当前url]23:15:19.006 INFO-Done:[获取当前url]23:15:19.028 INFO-Executing:[获取当前url])23:15:19.044 INFO-Done:[获取当前url]23:15:19.074 INFO-Executing:[获取当前url])23:15:20.384 INFO-Done:[获取当前url]是的,500毫秒是其他selenium语言绑定(如Python或Java)中的默认轮询频率,尽管在那里是可配置的。我将在下周一的实际代码库中测试这一点,但我怀疑轮询间隔太长,无法捕获第一个“呼叫”状态。API调用返回得非常快。。。
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');
});