Also in meinem Grundwinkel app habe ich ein Login-Formular:Winkelmesser Funktionstest nicht ng-Modell aktualisiert?
<form layout="column" class="form">
<md-input-container>
<label for="email" translate>login.email</label>
<input id="email" type="email" ng-model="login.user.email" />
<span ng-bind="login.user.email"></span>
</md-input-container>
<md-input-container>
<label for="password" translate>login.password</label>
<input id="password" type="password" ng-model="login.user.password" />
<span ng-bind="login.user.password"></span>
</md-input-container>
<md-button class="hbd-primary" ng-click="login.authenticate()" id="submit-button">
<span translate>login.connection</span>
</md-button>
</form>
Ich bin derzeit schriftlich Funktionstests mit Winkelmesser und Jasmin. Hier ist mein Login-Test:
it('should fail login with bogus credentials', function() {
page.emailInput.clear().then(function() {
page.emailInput.sendKeys('[email protected]');
});
expect(page.emailInput.getAttribute('value')).toBe('[email protected]');
page.passwordInput.clear().then(function() {
return page.passwordInput.sendKeys('boguspass');
})
.then(function() {
expect(page.passwordInput.getAttribute('value')).toBe('boguspass');
return page.submitButton.click();
})
.then(function() {
expect(page.alert.element(by.id("login-alert-text")).getText())
.toBe('Email ou mot de passe invalide');
});
});
Mein Problem ist mit dem Sendkeys() -Methode, auch wenn sie die E-Mail und das Passwort korrekt schreiben (visuell ist es in den Eingängen), wenn es Login-Funktion auslöst, bemerkte ich etwas seltsam mit der Anfrage params: die Felder Email und Passwort meines Objektbenutzers sind leer zB "". Aber wenn ich das Attribut 'Wert' der Eingaben überprüfe, wird es korrekt ausgefüllt, zB "[email protected]" & "boguspass".
Also suchte ich viel, aber bisher nichts gefunden, ich habe keine Ahnung, wo das Problem ...
Alle Leitungen sehr geschätzt würde sein könnte!
EDIT: zusätzlicher Code von Controller und Service.
Login-Controller
var vm = this;
vm.errors = '';
vm.user = {email: 'a', password: 'a', remember: true};
/**
*
* Log the user in.
*
**/
function authenticate() {
vm.errors = '';
retrieveToken(vm.user);
};
/**
*
* Get the jwt token. Change state depending on status.
*
**/
function retrieveToken(user) {
authService.login(user)
.success(function(data, status, headers, config) {
saveToken(data.token);
$state.go('employee');
})
.error(function(data, status, headers, config) {
vm.errors = 'Email ou mot de passe invalide';
});
};
/**
*
* Store the authenticated user.
*
**/
function saveToken(dataToken) {
var token = jwtHelper.decodeToken(dataToken);
var user = {
id: token.id,
firstName: token.firstName,
lastName: token.lastName,
roles: token.roles,
token: dataToken
};
authService.setAuthentication(true, user);
};
authService
function auth($injector, constants) {
var _authenticated = false;
var _user = null;
var service = {
login: login,
isAuthenticated: isAuth,
setAuthentication: setAuth,
getToken: getToken
};
/**
*
* Get the user authentication jwt.
*
**/
function login(user) {
return $injector.get('$http')
.post(constants.baseApiUrl + 'authentication/login', user);
};
/**
*
* Return a boolean to check if user is connected to app.
*
**/
function isAuth() {
return _authenticated;
};
/**
*
* Set the current user authentication.
*
**/
function setAuth(auth, user) {
if (auth) {
_authenticated = true;
_user = user;
}
else if (auth === false) {
_authenticated = false;
_user = null;
}
};
EDIT2: Wenn ich die Felder E-Mail und Passwort auf etwas setzen, ändern Sie diese Werte nicht bei der Authentifizierung, auch mit die clear und sendKeys. Aber visuell werden die Eingaben korrekt gelöscht und gefüllt. Ich vermute also, dass das Problem ein Datenbindungsproblem ist. Vielleicht ist die Zwei-Wege-Bindung in irgendeiner Weise gebrochen.
EDIT3: Ok, also unter jeder Eingabe habe ich einen Bereich mit einer ng-Bindung zu E-Mail und Passwort-Modell hinzugefügt. Wenn sendKeys und clear verwendet werden, ändert sich der spans-Wert nicht (zB 'a'). Es gibt also ein Problem mit der Datenbindung! Wertänderung, wenn ich manuell ein Zeichen von der Eingabe lösche.
Danke aber schon ausprobiert. EDIT: IMO es ist ein Winkelproblem, da Modell ist leer, aber nicht der Eingabewert. – Clemator
Also ist der Test tatsächlich vorbei? – mindparse
Ja, weil es den Benutzer {password: "", email: ""} an die Anmeldung sendet, die dann wie erwartet fehlschlägt. – Clemator