2017-11-30 4 views
0

Ich versuche zu testen, die GetDatabase Version Funktion wird die Abfrage als in der executeQuery -Funktion in der getQueryResult() von getDatabase aufgerufen. Der Code ist wie folgt:Wie verwendet man createSpyObj richtig?

`

var RequestHandler = function() { 
    this.getQueryResult = function (sQuery) { 
    this.checkConnection(); 
    try { 
     return this.conn.executeQuery.apply(this.conn, arguments); 
     } catch (err) { 
     this.conn.close(); 
     this.conn = null; 
     throw "unexpected error, please check application trace files for more information"; 
     } 
    }; 
    this.getDatabaseVersion = function() { 
    var query = "select top 1 VERSION from M_DATABASE"; 
    return this.getQueryResult(query)[0].VERSION; 
    }; 
} 

`

Der Testfall, den ich schrieb:

`

var RHandler = $.import("sap.hana.graph.viewer.XS_Backend.js.lib", "RequestHandler").RequestHandler; 

describe ("getDatabaseVersion Tests", function(){ 
    var rHandler = null; 
    var getQueryResult = jasmine.createSpyObj('getQueryResult', ['conn', 'executeQuery', 'close']); 
    var conn = jasmine.createSpyObj('conn', ['executeQuery', 'close']); 

    beforeEach(function() { 
     rHandler = new RHandler(); 
     rHandler.openConnection(); 
    }); 

    function getAllQueries() { 
     return getQueryResult.conn.executeQuery.calls.allArgs().join(':::'); 
    } 

    it('should return the databaseVersion and match the query sent to getQueryResult', function() { 
     rHandler.getDatabaseVersion(); 
     expect(rHandler.getDatabaseVersion()).toEqual("2.00.030.00.1502184660"); 
     expect(getAllQueries()).toEqual(/select top 1 VERSION from M_DATABASE/i); 
    }); 
}); 

` Aber es funktioniert nicht überhaupt arbeiten. Ich nähere mich falsch. Kann mir jemand helfen oder mich wissen lassen, was ich falsch mache?

+1

sind u Integration oder Unit-Tests zu tun? –

Antwort

1

Sie brauchen etwas wie folgt aus:

var RHandler = $.import("sap.hana.graph.viewer.XS_Backend.js.lib", "RequestHandler").RequestHandler; 
 

 
describe('RequestHandler',() => { 
 
    let rHandler = null; 
 
    let connection = null 
 

 
    beforeEach(() => { 
 
    connection = jasmine.createSpyObj('conn', ['executeQuery', 'close']) 
 
    
 
    rHandler = new RHandler(); 
 
    rHandler.conn = connection; 
 
    }); 
 

 
    describe('getQueryResult',() => { 
 
    beforeEach(() => { 
 
     spyOn(rHandler, 'checkConnection'); 
 
    }); 
 

 
    it('should check connection',() => { 
 
     rHandler.getQueryResult(); 
 

 
     expect(rHandler.checkConnection).toHaveBeenCalled(); 
 
    }); 
 

 
    it('should execute query',() => { 
 
     connection.executeQuery.and.returnValue('foo'); 
 

 
     const actual = rHandler.getQueryResult('bar', 'baz'); 
 

 
     // toHaveBeenCalledWithContext 
 
     // https://www.npmjs.com/package/jasmine-spy-matchers 
 
     expect(connection.executeQuery).toHaveBeenCalledWithContext(connection, 'bar', 'baz'); 
 
     // or default toHaveBeenCalledWith 
 
     expect(connection.executeQuery).toHaveBeenCalledWith('bar', 'baz'); 
 

 
     expect(actual).toBe('foo'); 
 
    }); 
 

 
    it('should throw error',() => { 
 
     connection.executeQuery.and.throwError(new Error('some error message')); 
 

 
     expect(() => { 
 
     rHandler.getQueryResult('bar', 'baz'); 
 
     }).toThrow('unexpected error, please check application trace files for more information'); 
 
     expect(rHandler.conn).toBe(null); 
 

 
    }); 
 
    }); 
 

 
    describe('getDatabaseVersion',() => { 
 
    it('should return version',() => { 
 
     spyOn(rHandler, 'getQueryResult').and.returnValue([{VERSION: '2.00.030.00.1502184660'}]) 
 

 
     const actual = rHandler.getDatabaseVersion(); 
 

 
     expect(rHandler.getQueryResult).toHaveBeenCalledWith('select top 1 VERSION from M_DATABASE') 
 
     expect(actual).toBe('2.00.030.00.1502184660'); 
 
    }); 
 
    }); 
 
});

+0

danke ich werde das ausprobieren. Ich denke, ich versuche Komponententests, wie ich die Funktion in Server-Seite wie getDatabase-Version, die von einem Dienst aufgerufen werden, testen. Dies ist das erste Mal, dass ich Tests durchführe, daher bin ich mir bei diesen Dingen nicht ganz sicher. – loki

+0

Hallo Alexey alles funktioniert außer diesem 'es (, function() 'sollte Abfrage ausführen' { //connection.executeQuery.and.returnValue('foo '); var actual = rHandler.getQueryResult (' top wählen 1 VERSION von M_DATABASE '); expect (connection.executeQuery) .toHaveBeenCalledWith (Verbindung,' wählen Sie oben 1 VERSION von M_DATABASE '); // expect (connection.executeQuery) .toHaveBeenCalledWith(); // expect (actual) .toBe ('foo'); }); ' – loki

+0

Erwarteter Spion conn.executeQuery, der mit [{executeQuery: conn.executeQuery ausspionieren, schließen: conn.close spionieren} aufgerufen wurde, 'wählt die oberste 1 VERSION von M_DATABASE aus Aber es wurde nie angerufen. – loki

Verwandte Themen