#sqlite #unit-testing #cordova #ionic-framework #karma-jasmine
#sqlite #модульное тестирование #кордова #ionic-framework #карма-жасмин
Вопрос:
Описание: — модульный тест проекта ionic-angular для макета SQLite не работает. Ниже приведен макет класса. Я хочу выполнить модульный тест для cordova SQLite, используя платформу jasmine
declare var SQL;
export class SQLiteObject {
_objectInstance: any;
constructor(_objectInstance: any) {
this._objectInstance = _objectInstance;
}
executeSql(statement: string, params: any): Promise<any> {
return new Promise((resolve, reject) => {
try {
console.log(statement);
const st = this._objectInstance.prepare(statement, params);
const rows: Array<any> = [] ;
while (st.step()) {
const row = st.getAsObject();
rows.push(row);
}
const payload = {
rows: {
item(i) {
return rows[i];
},
length: rows.length
},
rowsAffected: this._objectInstance.getRowsModified() || 0,
insertId: this._objectInstance.insertId || void 0
};
// save database after each sql query
const arr: ArrayBuffer = this._objectInstance.export();
localStorage.setItem('database', String(arr));
resolve(payload);
} catch (e) {
reject(e);
}
});
}
sqlBatch(statements: string[], params: any): Promise<any> {
return new Promise((resolve, reject) => {
try {
const rows: Array<any> = [];
for (const statement of statements) {
console.log(statement);
const st = this._objectInstance.prepare(statement, params);
while (st.step()) {
const row = st.getAsObject();
rows.push(row);
}
}
const payload = {
rows: {
item(i) {
return rows[i];
},
length: rows.length
},
rowsAffected: this._objectInstance.getRowsModified(),
insertId: this._objectInstance.insertId || void 0
};
// save database after each sql query
const arr: ArrayBuffer = this._objectInstance.export();
localStorage.setItem('database', String(arr));
resolve(payload);
} catch (e) {
reject(e);
}
});
}
}
export class SQLiteMock {
public create(config: SQLiteDatabaseConfig): Promise<SQLiteObject> {
let db;
const storeddb = localStorage.getItem('database');
if (storeddb) {
const arr = storeddb.split(',');
db = new SQL.Database(arr);
} else {
db = new SQL.Database();
}
return new Promise((resolve, reject) => {
resolve(new SQLiteObject(db));
});
}
}
Ошибка: — Sql не определен
Я просто следил за этой статьей https://www.techiediaries.com/mocking-native-sqlite-plugin/
Окружающая среда :-
Ionic 5
Angular 9
Пожалуйста, поделитесь любым альтернативным подходом и возможностями.. Спасибо.
Ответ №1:
На самом деле, это вызвано вашим sql.js слишком высокая версия. declare var SQL
должен быть заменен на declare const initSqlJs: any;
Полный код SqliteMock тогда выглядит следующим образом:
import { SQLiteDatabaseConfig } from '@ionic-native/sqlite/ngx';
import { SQLiteObject } from './sqlite-object';
declare const initSqlJs: any;
const sqlConfig = {
locateFile: filename => `./assets/js/sql-wasm.wasm`
};
export class SqliteMock {
public create(config: SQLiteDatabaseConfig): Promise<SQLiteObject> {
return initSqlJs(sqlConfig).then((sql) => {
const db = new sql.Database();
return new Promise( (resolve, reject) => {
resolve(new SQLiteObject(db));
});
});
}
}
И index.html затем следует ввести sql-wasm.js Также не забудьте поставить sql-wasm.js и sql-wasm.wasm в папке assets / js /
Я не знаю английского, поэтому это мой ответ через переводчик.