2015-06-15 14 views
5

Ich versuche, einen einfachen e2e-Test für die Authentifizierung in unserem Projekt zu schreiben, Authentifizierung basiert auf einem Json-Web-Token, das in window.localStorage.satellizer_token gesetzt wird.Winkelmesser testen, Zugriff und ändern Window-Objekteigenschaften

Um es zu setzen benutze ich den Code unten, aber für was ich sehe es nicht wirklich die lokale localStorage Eigenschaft des Fensterobjekts.

describe('login', function() { 
it('should set the satellizer token and be allowed to get panel', function() { 
    browser.driver.get('http://example.com/'); 
    browser.driver.executeScript(function() { 
     return window.localStorage; 
    }).then(function (localStorage) { 
     expect(localStorage.satellizer_token).toBe(undefined); 
     localStorage.satellizer_token = "eyJ0fdaccKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6IjE3MjUzIiwiaWF0IjoxNDM0Mzc1NjU3LCJleHAiOjE0NjU5Mjk2NTd9.VbhdWQ_gOb7X8pmOGLDjBKURxcaWQlIXQGvLRansQCphk"; 
     expect(localStorage.satellizer_token).toBe("eyJ0fdaccKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6IjE3MjUzIiwiaWF0IjoxNDM0Mzc1NjU3LCJleHAiOjE0NjU5Mjk2NTd9.VbhdWQ_gOb7X8pmOGLDjBKURxcaWQlIXQGvLRansQCphk"); 
     browser.driver.get('http://example.com/panel'); 
     expect(browser.driver.getTitle()).toEqual('http://example.com/panel'); 
     expect(browser.driver.getCurrentUrl()).toEqual('http://example.com/panel'); 
    }); 
}); 

});

Ich weiß, es gibt bereits etwas ähnliches here und here aber alle Beispiele, die ich finden kann, sind nur für den Zugriff, ich muss auch Fenstereigenschaften ändern.

Wie ist die korrekte Interaktion mit dem Fensterobjekt in Winkelmessertests?

Antwort

4

Arbeitslösung:

browser.executeScript(function() { 
     window.localStorage.satellizer_token = "eyJ0eXAiOiJKV1QiLCJhbGasdsOiJIUzI1NiJ9.eyJpZCI6IjE3MjUzIiwiaWF0IjoxNDM0Mzc1NjU3LCJleHAiOjE0NjU5Mjk2NTd9.VbhdWQ_gOb7X8pmOGLDjBKURQUQlcAfGSGvLRansQCphk"; 
    }); 
0
+0

Für das, was es sieht das Fenster Methode nur eine Reihe von vordefinierten Methoden hat mit dem Fenster Objekt zu interagieren, aber es doesn‘ t erlaube mir, neue Eigenschaften zu setzen. – pietrovismara

+1

Genau. Denn was es zurückgibt, ist eine Schnittstelle, die wie folgt definiert ist: http://angular.github.io/protractor/#/api?view=webdriver.WebDriver.Window. Wenn Sie das Fenster Objekt in einer benutzerdefinierten Weise verwalten möchten, würde ich sagen, es ist in Ordnung, wie Sie gerade tun. Ich würde Ihnen empfehlen, die anonyme Callback-Funktion außerhalb des Skriptes execute zu deklarieren, um sie besser wiederverwenden zu können, zB: 'var localStorageSetter = function() { window.localStorage.satellizer_token = 'was auch immer'; } browser.executeScript (localStorageSetter); ' –