如何在 Angular 单元测试中检查对象是否是 promise?
How to check if object is promise in Angular unit tests?
我想要一个断言来检查调用方法返回的对象是否是一个承诺。
是否足以检查它是否存在并具有 then
方法?
或者有没有更好的方法来做到这一点,因为 then
方法不能保证对象是 $q
延迟承诺?
编辑:
问题不是“Any way to know if a variable is an angularjs promise?”的重复项。
该问题的解决方案是确保使用 $q.when()
.
返回承诺
我问的是如何知道一个对象是一个 promise,而不是如果不是的话如何使它成为一个 promise。
谢谢。
据我所知,没有办法直接这样做。
构建对象时,我通常是这样操作的:
function Derp(){
this.constructor = Derp;
}
Derp.prototype.method = function(){};
这样我就可以:
expect( new Derp() instanceof Derp ).toBe(true);
但在 $q.promise 和 $q 本身中,除了 __proto__ 中的构造函数 属性(在 chrome 中),没有构造函数或原型属性对象;甚至那些只是指向 JavaScript 的基本对象。
因此,为了测试某物是否是一个 promise,您必须假设您要返回的对象是一个基于其其他属性的 promise:
expect(typeof result.when).toBe('function');
expect(typeof result.then).toBe('function');
我也不喜欢,但这是我能想到的唯一方法。
我想要一个断言来检查调用方法返回的对象是否是一个承诺。
是否足以检查它是否存在并具有 then
方法?
或者有没有更好的方法来做到这一点,因为 then
方法不能保证对象是 $q
延迟承诺?
编辑:
问题不是“Any way to know if a variable is an angularjs promise?”的重复项。
该问题的解决方案是确保使用 $q.when()
.
返回承诺
我问的是如何知道一个对象是一个 promise,而不是如果不是的话如何使它成为一个 promise。
谢谢。
据我所知,没有办法直接这样做。 构建对象时,我通常是这样操作的:
function Derp(){
this.constructor = Derp;
}
Derp.prototype.method = function(){};
这样我就可以:
expect( new Derp() instanceof Derp ).toBe(true);
但在 $q.promise 和 $q 本身中,除了 __proto__ 中的构造函数 属性(在 chrome 中),没有构造函数或原型属性对象;甚至那些只是指向 JavaScript 的基本对象。
因此,为了测试某物是否是一个 promise,您必须假设您要返回的对象是一个基于其其他属性的 promise:
expect(typeof result.when).toBe('function');
expect(typeof result.then).toBe('function');
我也不喜欢,但这是我能想到的唯一方法。