gpt4 book ai didi

javascript - 在 Jasmine 中使用 $q 测试 AngularJS 服务

转载 作者:行者123 更新时间:2023-11-30 05:34:34 25 4
gpt4 key购买 nike

Angulars 构建在 $q promise 实现中,这让我很难在我的 Jasmine 测试环境中创建测试。我构建了一个简单的服务,其唯一目的是打开一个 IndexedDB 数据库:

var myApp = angular.module('myApp', []);

myApp.service('idb', function ($q) {
var dbName = 'TestDb';

this.open = function () {
var deferred = $q.defer();

var request = indexedDB.open(dbName, 1);

request.onsuccess = function () {
deferred.resolve();
};
request.onerror = function () {
deferred.reject();
};

return deferred.promise;
};
});

这是我在 Jasmine 中的测试:

describe('indexed db test', function () {
var idbOpened = false;
var idb, $rootScope;

beforeEach(module('myApp'));

beforeEach(inject(function (_idb_, _$rootScope_) {
idb = _idb_;
$rootScope = _$rootScope_;
}));

beforeEach(function (done) {
idb.open().then(

function () {
idbOpened = true;
},

function () {
idbOpened = false;
})['finally'](done);

$rootScope.$digest();
});

it('checks if indexeddb is opened', function () {
expect(idbOpened).toBeTruthy();
});
});

你可以找到a jsfiddle here

测试因超时而失败,因为未调用 finally 的异步回调。

我知道我必须在 promise 解决后调用 $rootScope.$digest(),因为 Angular 将 promise.resolve 回调放在 evalAsync 队列。

我不明白的是如何在我的测试环境中执行此操作。显然我怎么调用它不是要走的路。

最佳答案

正如我在这里提到的 https://stackoverflow.com/a/29155447/2599875 ,基本上对我有用的是 each async call 回调结束时的方法 $rootScope.$apply()

关于javascript - 在 Jasmine 中使用 $q 测试 AngularJS 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24733108/

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