2014-08-27 99 views
1

我开始使用Jasmine进行严重依赖于承诺的JavaScript库的单元测试。我需要异步测试失败的情况下,想写点东西像下面这样:使用承诺失败的异步测试案例

describe("An async test suite", function() { 
    it("should fail asynchronously", function (done, fail) { 
    var promise = myLibraryCall(); 
    promise.then(done, function(reason) { fail(reason); }); 
    }); 
}); 

然而,有没有像从我所看到的一个fail电话。而且我不能在异步错误情况下抛出异常,因为它没有被Jasmine捕获 - 我所得到的只是一个最终的泛型超时。解决这个问题的最好方法是什么?

回答

1

短暂修改茉莉花本身,简单的解决方案是围绕expectcustom matcher的组合创建一个包装,以使给定消息失败。

function endTestAfter(promise, done) { 
    var customMatchers = { 
    toFailWith: function() { 
     return { 
     compare: function (actual, expected) { 
      return { 
      pass: false, 
      message: "Asynchronous test failure: " + JSON.stringify(expected) 
      }; 
     } 
     } 
    } 
    }; 
    jasmine.addMatchers(customMatchers); 
    promise.done(done, function (reason) { 
    expect(null).toFailWith(reason); 
    done(); 
    }); 
} 

这产生以下测试套件的代码:

describe("An async test suite", function() { 
    it("should fail asynchronously", function (done, fail) { 
    var promise = myLibraryCall(); 
    endTestAfter(promise, done); 
    }); 
});