第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

AngularJS - 使用$ q實現(xiàn)的函數(shù)在測試時無法解析

AngularJS - 使用$ q實現(xiàn)的函數(shù)在測試時無法解析

慕村225694 2019-04-15 17:15:19
我正在使用jsonapi-serializer庫來反序列化API數(shù)據(jù)。我使用angular的$ q構(gòu)造函數(shù)進(jìn)行回調(diào)并將其包裝在服務(wù)中,這在瀏覽器上工作正常,但是當(dāng)我在karma運行器上使用jasmine測試它時,promise無法解決。這是服務(wù)上的方法(注意我使用的是TypeScript)public deserialize(type: string, data: any): any {// get the predefined options for resource typelet deserializeOpts:  any = this.deserializeOpts[type];// use jsonapi-serializer// the options are not workinglet deserializer:  any = new JAS.Deserializer({});console.log(data);// return a promise with the parsed objectreturn 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);     }   });});}經(jīng)過一段時間嘗試調(diào)試后,這是我的測試it('should flatten jsonapi user', function (done) {   var deserialized;   JsonapiParser.deserialize(type, apiUser).then(     (result) => {       deserialized = result;       expect(deserialized).toEqual(apiUser);       done();     }   );});這是所提到的解串器服務(wù)的示例用法// returns the promise so controller can display the errorsreturn 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方法中登錄,我可以看到回調(diào)得到解決,但承諾似乎永遠(yuǎn)不會消化。如果我在調(diào)用解決后放置$ rootScope。$ digest(),測試工作,但我不想在那里硬編碼,特別是因為代碼在部署時工作。
查看完整描述

2 回答

?
繁星淼淼

TA貢獻(xiàn)1775條經(jīng)驗 獲得超11個贊

你很接近$rootScope.$digest(),但不是從應(yīng)用程序代碼觸發(fā)摘要,而是從測試中觸發(fā)它$rootScope.$apply()

請參閱測試承諾服務(wù)測試。


查看完整回答
反對 回復(fù) 2019-05-08
  • 2 回答
  • 0 關(guān)注
  • 417 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號