如何在Angular单元测试中检查对象是否有保证?

时间:2015-12-03 11:50:21

标签: angularjs unit-testing jasmine angular-promise

我想要一个断言来检查调用方法的返回对象是否是一个promise。

检查它是否存在并且采用then方法是否足够? 或者是否有更好的方法可以做到这一点,因为使用then方法并不能保证对象是$q延迟的承诺?

编辑:
问题不是" Any way to know if a variable is an angularjs promise?"。的副本 该问题的解决方案是确保使用$q.when()返回承诺 我问如何知道一个对象是一个承诺,而不是如果它不是如何使它成为一个承诺。

感谢。

1 个答案:

答案 0 :(得分:2)

据我所知,没有办法直接这样做。 在构造对象时,我通常会这样做:

function Derp(){
   this.constructor = Derp;
}
Derp.prototype.method = function(){};

所以我可以:

expect( new Derp() instanceof Derp ).toBe(true);

但在$ q.promise和$ q本身中,除了__proto__(在chrome中)对象中的构造函数属性外,没有构造函数或原型属性;甚至那些只是指向JavaScripts的基本对象。

因此,为了测试某事物是一个承诺,您必须假设您返回的对象是基于其他属性的承诺:

expect(typeof result.when).toBe('function');
expect(typeof result.then).toBe('function');

我也不喜欢它,但这是我能想到的唯一方法。