2017-10-02 13 views
0

내 엑스포/반응 네이티브 앱을 단위 테스트하는 데 어려움이 있습니다. 이 클래스의 상점에 트랜잭션을 추가하는 단위 테스트는 어떻게됩니까?유토피아에서 expo sqlite 호출로 단위 테스트 클래스

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을 모의해야만한다고 생각하지만, executeSql의 그 중첩 된 기능에 위조를주는 그런 방법으로 그것을하는 방법을 볼 수는 없다. (tx, result).

답변

0

어떤 생각으로이 작업을 얻을 수있었습니다 : 뇌 운동에 대한

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 호출에서 일부 데이터를 가짜로