Javascript 使用expo sqlite调用的单元测试类

Javascript 使用expo sqlite调用的单元测试类,javascript,sqlite,unit-testing,jestjs,expo,Javascript,Sqlite,Unit Testing,Jestjs,Expo,在学习单元测试expo/react本机应用程序时遇到问题。如何在此类中将事务添加到存储中进行单元测试: export default class TransactionsStore { @observable _transactions = []; constructor(rootStore) { this.rootStore = rootStore; } @action addTransaction(t, db) { db.t

在学习单元测试expo/react本机应用程序时遇到问题。如何在此类中将事务添加到存储中进行单元测试:

export default class TransactionsStore {
    @observable _transactions = [];

    constructor(rootStore) {
        this.rootStore = rootStore;
    }

    @action addTransaction(t, db) {
        db.transaction(tx => {
            tx.executeSql(
                'INSERT INTO transactions (categoryId, description, date, amount, currencyCode, isReported) VALUES (?,?,?,?,?,?);',
                [t.category, t.description, t.date, t.amount, t.currency.code, t.report],
                (tx, result) => { t.id = result.insertId; }
            );
        }, error => alert(error));
        this.reloadTransactions(db);
    }
}

回调中的所有回调使得这非常困难。我想我必须以某种方式模拟
db.transaction
,但我不知道如何将一个假的
(tx,result)
放入
executeSql

的嵌套函数中

var sqlResult = { insertId: 1, rows: { _array: [] } };
const tx = { executeSql: jest.fn((query, sub=[], func=()=>true) => func({}, sqlResult)) };
const db = { transaction: jest.fn((func) => func(tx)) };
const rootStore = { db: db } };

describe('TransactionsStore', () => {
    const store = new TransactionsStore(rootStore);

    it('mocks sql', () => {
        expect(tx.executeSql.mock.calls.length).toBeGreaterThan(0);
    });
});
谈谈大脑锻炼!通过这种方式,我可以在测试之间操纵
sqlResult
,以伪造sql调用中的一些数据