gpt4 book ai didi

angularjs - Cordova s​​qliteplugin karma 测试说明

转载 作者:行者123 更新时间:2023-12-03 06:35:58 26 4
gpt4 key购买 nike

您好,我想为我的 ionic 框架应用程序实现一些测试用例,该应用程序使用 cordova s​​qliteplugin 从 sqlite 数据库获取数据。

我在为 angularjs 编写测试用例方面非常陌生。

我的目标是测试我的服务是否有数据。

在我的 app.js 中,我用以下命令打开数据库:

angular.module('starter', ['ionic','starter.services', 'starter.controllers', 'starter.config','ngCordova'])

.run(function($ionicPlatform, $cordovaSQLite, $ionicLoading) {
$ionicPlatform.ready(function() {

var dbName = 'testDB.db';
if(window.cordova) {
window.plugins.sqlDB.copy(dbName);
db = $cordovaSQLite.openDB(dbName);
}

....

我的 services.js 看起来像这样:

angular.module('starter.services', ['ngCordova'])

.factory('ProductService',function($cordovaSQLite){

var getAllProducts = function() {
var productList = [];

var query = "SELECT c.name as name, c.id as id FROM cars as c ORDER BY c.name";
$cordovaSQLite.execute(db, query, []).then(function(res) {

if(res.rows.length > 0) {

for(var i = 0; i < res.rows.length; i++) {
productList.push({id: res.rows.item(i).id, name: res.rows.item(i).name});
}

}
}, function (err) {
console.error(err);
});

return productList;
};

return {
getAllProducts: getAllProducts
};

});

我测试服务的测试描述如下:

describe('ProductService unit tests', function () {
var ProductService;

beforeEach(module('starter.services'));
beforeEach(angular.mock.module('starter'));

beforeEach(inject(function(_ProductService_) {
ProductService = _ProductService_;
}));

it('can get an instance', inject(function(ProductService) {
expect(ProductService).toBeDefined();
}));

//THIS TEST FAILS
it('should get some products from the database', inject(function(ProductService) {
expect(ProductService.getAllProducts().length).toBeGreaterThan(0);
}));
});

如果我运行测试,我会得到:

TypeError: 'null' is not an object (evaluating 'n.transaction')

我认为这是因为数据库在测试过程中没有真正初始化,所以我尝试模拟启动应用程序,但它没有解决问题。我尝试用 google 搜索这个问题,但找不到任何关于 sqlite 和 angularjs 的 karma 示例或教程。

感谢您的帮助。

最佳答案

我遇到了同样的问题,结果发现数据库未初始化。我最终为数据库创建了工厂以注入(inject)您需要的服务

.factory('DB', function($cordovaSQLite) {
var db = $cordovaSQLite.openDB("my.db");
$cordovaSQLite.execute(db, "CREATE TABLE IF NOT EXISTS cards (id integer primary key,question text, answer text)");
return db;
})

注入(inject) Controller :

.controller('CardsCtrl', function($scope, $http, $ionicSwipeCardDelegate,$cordovaSQLite,DB) {

var query = "SELECT * FROM cards ";
$cordovaSQLite.execute(DB, query,[]).then(function(res) {
if(res.rows.length > 0) {
....do stuff...
} else {

}
}, function (err) {
console.error(err);
});

});

关于angularjs - Cordova s​​qliteplugin karma 测试说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28899184/

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