2015-03-06 5 views
2

Здравствуйте, я хочу реализовать некоторые тестовые примеры для моего приложения с ионной каркасом, которое использует кордову sqliteplugin для получения данных из базы данных sqlite.Описание теста кармады Cordova sqliteplugin

Я очень новичок в написании тестовых примеров для 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.

Спасибо за любую помощь.

+0

Любое обновление по этому вопросу, я поражаюсь на одно и то же – mahi

ответ

1

У меня была такая же проблема, и оказалось, что db не был инициализирован. я в конечном итоге создание завода по дб, чтобы ввести в необходимые Вам услуги

.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; 
    }) 

Инъекция в контроллере:

.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); 
    }); 

    }); 

 Смежные вопросы

  • Нет связанных вопросов^_^