gpt4 book ai didi

javascript - AngularJS - 用 $q promise 的函数在测试中没有解析

转载 作者:行者123 更新时间:2023-11-30 16:09:51 26 4
gpt4 key购买 nike

我正在使用 jsonapi-serializer 库反序列化 API 数据。我使用 angular 的 $q 构造函数 promise 了回调并将其包装在服务中,这在浏览器上运行良好,但是当我在 karma runner 上使用 jasmine 测试它时, promise 没有解决。这是服务上的方法(注意我使用的是 TypeScript)

public deserialize(type: string, data: any): any {

// get the predefined options for resource type
let deserializeOpts: any = this.deserializeOpts[type];

// use jsonapi-serializer
// the options are not working
let deserializer: any = new JAS.Deserializer({});

console.log(data);
// return a promise with the parsed object
return this._$q((resolve: any, reject: any) => {
deserializer.deserialize(data, (err: any, result: any) => {
if (result) {
console.log(resolve);
resolve(result);
} else {
console.log(err);
reject(err);
}
});
});
}

这是我尝试调试一段时间后的测试

it('should flatten jsonapi user', function (done) {
var deserialized;
JsonapiParser.deserialize(type, apiUser).then(
(result) => {
deserialized = result;
expect(deserialized).toEqual(apiUser);
done();
}
);
});

这是上述反序列化器服务的示例使用

// returns the promise so controller can display the errors
return this.$http.get(url)
.then(
(response: any) => {
if (response.data.data.length !== 0) {// deserialize data
return this._deserializer.deserialize('activities', response.data) // the deserializer service is called;
} else { // throw an error if data is empty
return this.$q.reject({ error: this.ACTIVITY.empty });
}
},
() => {
return this.$q.reject({ error: this.ACTIVITY.connectionError });
}
).then(
(deserialized: any) => { // data is copied to original list so it doesn't lose it's bindings
angular.copy(deserialized, this.list); // the result from the deserializer is used
console.log(deserialized);
return this.list;
});

最后一段代码在浏览器上编译和运行时工作正常。但是测试会超时。如果我登录 deserialize 方法,我可以看到回调得到解决,但 promise 似乎永远不会消化。如果我在调用 resolve 之后放置一个 $rootScope.$digest() ,测试会工作,但我不想在那里硬编码,特别是因为代码在部署时工作。

最佳答案

您接近 $rootScope.$digest(),但是不是从应用代码触发摘要,而是从测试中触发 $rootScope.$apply().

参见 Testing PromisesService Testing .

关于javascript - AngularJS - 用 $q promise 的函数在测试中没有解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36438927/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com