Ionic Couchbase Lite Karma Jasmine 单元测试
Ionic Couchbase Lite Karma Jasmine Unit Testing
经过一番努力,我成功地使用 karma 进行了 jasmine 测试 运行ning,但我似乎找不到这个问题的答案:
我如何 运行 我的 jasmine 在实际设备上测试以测试与 couchbase lite 数据库相关的功能?
我正在使用这个:https://github.com/couchbaselabs/ng-couchbase-lite
这是我的测试:
describe('SetupService tests', function() {
it('SetupService should instantiate', function() {
expect(SetupService).toBeDefined();
});
it('it should instantiate database', function() {
var database = null;
SetupService.setupConfig();
expect(database).not.toBeNull();
});
});
所以我需要 运行 在实际设备上进行测试,以便成功创建数据库。我是单元测试的新手,目前只使用 karam cli。
设置配置显示它需要 couchbase lite 和 cordova:
var setupConfig = function() {
console.log("set up config");
var deferred = $q.defer();
if(!window.cblite) {
deferred.reject('Couchbase Lite not installed');
}
else {
cblite.getURL(function(err, url) {
console.log("cblite get url");
if(err) {
console.log(err);
deferred.reject("There was an error getting the database URL");
}
else{
database = new $couchbase(url, appDbName);
database.createDatabase().then(function(result) {
var views = setupViews();
database.createDesignDocument("_design/todo", views);
database.listen();
deferred.resolve(true);
}, function(error) {
// we will not reject this err, as it is caused when a db already exists
// so it will happen everytime
deferred.resolve(err);
});
}
});
}
return deferred.promise;
};
在 www/
中创建一个名为 tests
的文件夹
.
从 Here
下载最新的独立 jasmine zip
一个。将 lib
文件夹放入 www/tests
b。复制 SpecRunner.html
到 www/
.
- 让你的
SpecRunner.html
看起来和你的 index.html
完全一样
.
然后在</head>
之前将jasmine css和脚本添加到SpecRunner.html
<link rel="shortcut icon" type="image/png" href="tests/lib/jasmine-x.x.x/jasmine_favicon.png">
<link rel="stylesheet" href="tests/lib/jasmine-x.x.x/jasmine.css">
<style>
.jasmine_html-reporter{
width: 100%;
margin: 200px 0px;
}
</style>
在body
标签末尾,添加jasmine lib脚本:
<script src="tests/lib/jasmine-x.x.x/jasmine.js"></script>
<script src="tests/lib/jasmine-x.x.x/jasmine-html.js"></script>
<script src="tests/lib/jasmine-x.x.x/boot.js"></script>
.
在www/tests/lib/jasmine-x.x.x/boot.js
中打开boot.js
查找 window.load
函数并替换为:
window.onload = function() {
if (currentWindowOnload) {
currentWindowOnload();
}
jasmine.initialize = htmlReporter.initialize;
jasmine.execute = env.execute;
};
.
在开始页面的 ctrl 中,加载所有内容后添加:
if(window.jasmine){
console.log("---------------------------------------------------------");
console.log("STARTING JASMINE...");
jasmine.initialize();
jasmine.execute();
console.log("---------------------------------------------------------");
console.log("JASMINE INITIALED");
console.log("---------------------------------------------------------");
}
我个人 bootstrap angular 手动,所以我在 angular 被 bootstrapped 和我的主 Ctrl 加载后启动 jasmine:
window.ionic.Platform.ready(function() {
console.log("device ready");
angular.element(document).ready(function() {
angular.bootstrap(document, ['myApp']);
});
});
然后在我从 Couchbase 加载文档后,在我的 Ctrl 中启动 jasmine。
.
终于运行测试:
将 index.html
重命名为 index_backup.html
将 SpecRunner.html
重命名为 index.html
和运行ionic run android --device
.
使用 Makefile 自动执行第 8 步:
set-test:
@if [ -f "www/SpecRunner.html" ]; \
then \
mv www/index.html www/index_backup.html; \
mv www/SpecRunner.html www/index.html; \
else \
echo "test already set"; \
fi
unset-test:
@if [ -f "www/SpecRunner.html" ]; \
then \
echo "test already unset"; \
else \
mv www/index.html www/SpecRunner.html; \
mv www/index_backup.html www/index.html; \
fi
test:
make set-test
ionic run android --device
样本测试
describe('AccountsCtrl', function() {
var $scope;
var app;
var $ionicSideMenu;
var helper;
var params = {
name : 'Test Person',
id: '112654'
};
beforeAll(function(done){
app = AppService;
helper = getService("ActivitiesHelper");
$state.go('app.activities',params);
// wait for the state to change
setTimeout(function(){
$scope = getScope("activities");
done();
},1000)
});
it('expects $scope.app to be defined', function() {
expect($scope.app).toBeDefined();
});
});
经过一番努力,我成功地使用 karma 进行了 jasmine 测试 运行ning,但我似乎找不到这个问题的答案:
我如何 运行 我的 jasmine 在实际设备上测试以测试与 couchbase lite 数据库相关的功能?
我正在使用这个:https://github.com/couchbaselabs/ng-couchbase-lite
这是我的测试:
describe('SetupService tests', function() {
it('SetupService should instantiate', function() {
expect(SetupService).toBeDefined();
});
it('it should instantiate database', function() {
var database = null;
SetupService.setupConfig();
expect(database).not.toBeNull();
});
});
所以我需要 运行 在实际设备上进行测试,以便成功创建数据库。我是单元测试的新手,目前只使用 karam cli。
设置配置显示它需要 couchbase lite 和 cordova:
var setupConfig = function() {
console.log("set up config");
var deferred = $q.defer();
if(!window.cblite) {
deferred.reject('Couchbase Lite not installed');
}
else {
cblite.getURL(function(err, url) {
console.log("cblite get url");
if(err) {
console.log(err);
deferred.reject("There was an error getting the database URL");
}
else{
database = new $couchbase(url, appDbName);
database.createDatabase().then(function(result) {
var views = setupViews();
database.createDesignDocument("_design/todo", views);
database.listen();
deferred.resolve(true);
}, function(error) {
// we will not reject this err, as it is caused when a db already exists
// so it will happen everytime
deferred.resolve(err);
});
}
});
}
return deferred.promise;
};
在 www/
中创建一个名为tests
的文件夹.
从 Here
下载最新的独立 jasmine zip一个。将
lib
文件夹放入www/tests
b。复制
SpecRunner.html
到www/
.
- 让你的
SpecRunner.html
看起来和你的index.html
完全一样
.
然后在
之前将jasmine css和脚本添加到</head>
SpecRunner.html
<link rel="shortcut icon" type="image/png" href="tests/lib/jasmine-x.x.x/jasmine_favicon.png"> <link rel="stylesheet" href="tests/lib/jasmine-x.x.x/jasmine.css"> <style> .jasmine_html-reporter{ width: 100%; margin: 200px 0px; } </style>
在
body
标签末尾,添加jasmine lib脚本:<script src="tests/lib/jasmine-x.x.x/jasmine.js"></script> <script src="tests/lib/jasmine-x.x.x/jasmine-html.js"></script> <script src="tests/lib/jasmine-x.x.x/boot.js"></script>
.
在
中打开www/tests/lib/jasmine-x.x.x/boot.js
boot.js
查找
window.load
函数并替换为:window.onload = function() { if (currentWindowOnload) { currentWindowOnload(); } jasmine.initialize = htmlReporter.initialize; jasmine.execute = env.execute; };
.
在开始页面的 ctrl 中,加载所有内容后添加:
if(window.jasmine){ console.log("---------------------------------------------------------"); console.log("STARTING JASMINE..."); jasmine.initialize(); jasmine.execute(); console.log("---------------------------------------------------------"); console.log("JASMINE INITIALED"); console.log("---------------------------------------------------------"); }
我个人 bootstrap angular 手动,所以我在 angular 被 bootstrapped 和我的主 Ctrl 加载后启动 jasmine:
window.ionic.Platform.ready(function() { console.log("device ready"); angular.element(document).ready(function() { angular.bootstrap(document, ['myApp']); }); });
然后在我从 Couchbase 加载文档后,在我的 Ctrl 中启动 jasmine。
.
终于运行测试:
将
index.html
重命名为index_backup.html
将SpecRunner.html
重命名为index.html
和运行
ionic run android --device
.
使用 Makefile 自动执行第 8 步:
set-test: @if [ -f "www/SpecRunner.html" ]; \ then \ mv www/index.html www/index_backup.html; \ mv www/SpecRunner.html www/index.html; \ else \ echo "test already set"; \ fi unset-test: @if [ -f "www/SpecRunner.html" ]; \ then \ echo "test already unset"; \ else \ mv www/index.html www/SpecRunner.html; \ mv www/index_backup.html www/index.html; \ fi test: make set-test ionic run android --device
样本测试
describe('AccountsCtrl', function() { var $scope; var app; var $ionicSideMenu; var helper; var params = { name : 'Test Person', id: '112654' }; beforeAll(function(done){ app = AppService; helper = getService("ActivitiesHelper"); $state.go('app.activities',params); // wait for the state to change setTimeout(function(){ $scope = getScope("activities"); done(); },1000) }); it('expects $scope.app to be defined', function() { expect($scope.app).toBeDefined(); }); });