Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.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 如何在量角器中实现阻塞等待(使用jasmine)来调用异步函数,并在函数返回后立即使测试失败?_Javascript_Angularjs_Testing_Jasmine_Protractor - Fatal编程技术网

Javascript 如何在量角器中实现阻塞等待(使用jasmine)来调用异步函数,并在函数返回后立即使测试失败?

Javascript 如何在量角器中实现阻塞等待(使用jasmine)来调用异步函数,并在函数返回后立即使测试失败?,javascript,angularjs,testing,jasmine,protractor,Javascript,Angularjs,Testing,Jasmine,Protractor,在使用jasmine测试框架运行量角器测试期间,我需要调用一个返回承诺的异步函数,阻止测试执行,直到承诺返回,然后检查一个条件,如果条件为真,则立即使量角器测试失败,而不执行进一步的命令 我搜索了StackOverflow,但没有找到我的问题的直接答案,正如我所期望的那样。有3个步骤: 显式创建一个承诺,使用browser.wait,并在异步函数中解析该承诺(如果继续执行) 创建承诺。然后,返回true,以便browser.wait继续 如果要立即使当前测试失败,请调用throw new Err

在使用jasmine测试框架运行量角器测试期间,我需要调用一个返回承诺的异步函数,阻止测试执行,直到承诺返回,然后检查一个条件,如果条件为真,则立即使量角器测试失败,而不执行进一步的命令


我搜索了StackOverflow,但没有找到我的问题的直接答案,正如我所期望的那样。

有3个步骤:

显式创建一个承诺,使用browser.wait,并在异步函数中解析该承诺(如果继续执行) 创建承诺。然后,返回true,以便browser.wait继续 如果要立即使当前测试失败,请调用throw new Error 这是一个“单元测试”功能{ 这是。阻塞等待和失败; 此功能应运行; }; this.blockingWaitAndFail=函数{ //1.明确创建的承诺 // ------ var DEBER=量角器.PROMITE.DEBER; // ------ this.function that returns promise.then function returned{ 如果返回{ //3.抛出错误并立即停止测试 // ------ 抛出新错误“某些错误”; // ------ }否则{ //1.解析浏览器中使用的承诺。等待 // ------ 延迟完成; // ------ } },功能{ 抛出新错误“错误调用函数”; }; //2.承诺。然后返回真实 推迟、许诺、履行职能{ 返回true; },函数{}; //1.browser.wait on已创建承诺 browser.waitdefer.promise,10000,“等待承诺超时”; }
也许有更简单的方法,或者更干净,但这就是我想到的。对改进的意见表示感谢。

我不熟悉AngularJS、Jasmine或量角器承诺,因此可能会有更好的架构上更同质的解决方案

话虽如此,可以部署标准Javascript ES6承诺,例如:-

function wait(time) {
 return new Promise(function(resolve, reject) {
 var req = setTimeout(function(){resolve();}, time);
 });
 }

wait(5000).then(function(resp){alert('Finished waiting');},function(err){});
如果您的承诺没有.THEN和.CATCH语法/功能,您可以使用异步函数解析或拒绝通过闭包或全局传递的JS承诺

如果条件为true,则逻辑将进入.THENfunctionreturnValue{}


HTH

假设您使用的是mocha或jasmine,那么您没有提到您使用的测试框架。从你的问题来看,除了等待承诺得到解决之外,你似乎不想等待任何条件。对于这种用例,您不需要browser.wait。根据我从您的问题中收集的信息,下面这样一个简单的解决方案应该可以奏效

it('should immediately fail if the condition is returned', function(done) {
     this.functionThatReturnsPromise().then(function(returned) {
        if(returned) {
           done(throw new Error('Condition was not expected'));
        } else {
           done();
        }   
     });
});

像这样的怎么样:

function myCheck()  {
 return myAsyncFunction().then(function () {
  return //condition
 );
}

expect(myCheck()).toEqual(false);
//Your test will fail at this point, if your condition returns true.

//rest of your code here. It will be run if the tests did not fail
不确定它是否会起作用,但我在测试中使用了类似的东西。expect将解决myCheck的承诺,并应提供您期望的结果。

试试这个

somefunction().then(function(result){
   if(check condition){
      fail;
   }else{
      run tests;
   }
});

我不想在it中使用承诺语法。相反,我希望函数blockingWaitAndFail保持自身。在执行此操作时,我尝试使用done语句,但不知何故,在运行blockingWaitAndFail和faile之后,函数thisfunction应该不会运行。是的,运行jasmine。你可以将“完成”传递给“返回的函数”并适当地调用“完成”。我已经尝试过了,但无法使其工作,不确定我是否做错了什么。它等待完成,但不知何故执行了函数thatReturnsPromise之后的下一个代码行。不确定它到底返回了什么,但在我的测试中它不起作用。