我想要一个断言来检查调用方法的返回对象是否是一个promise。
检查它是否存在并且采用then
方法是否足够?
或者是否有更好的方法可以做到这一点,因为使用then
方法并不能保证对象是$q
延迟的承诺?
编辑:
问题不是" Any way to know if a variable is an angularjs promise?"。的副本
该问题的解决方案是确保使用$q.when()
返回承诺
我问如何知道一个对象是一个承诺,而不是如果它不是如何使它成为一个承诺。
感谢。
答案 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');
我也不喜欢它,但这是我能想到的唯一方法。