Voglio capire come Behaviour Driven Development (BDD) può essere applicato alla costruzione di CRUD applicazioni.
Ho letto molto sull'argomento, ma non capisco come dovrei applicarlo. Imparo meglio con l'esempio, quindi ho creato un'applicazione mini CRUD e vorrei che qualcuno lo completasse aggiungendo i test. L'applicazione è un semplice modulo di registrazione. L'utente compila il modulo con la sua email, quindi il server lo salva nel database.
Q1. Quale comportamento dovrei testare?
Q2. Quale parte devo testare?
Ovviamente, voglio che il mio utente sia in grado di registrare la sua email. Quindi è questo il comportamento che dovrei testare? Inoltre, posso testare l'interfaccia utente? Verifica che l'email sia realmente nel database dopo la registrazione? E come faccio a testare tutto questo?
HTML
<h1>Registration Form</h1>
Email
<input type="text" id="email" />
<button type="button" onclick="client.register();">
Register
</button>
<div id="error"></div>
JavaScript
/**
* The client represents the code that runs in the browser
*/
var client = {
register: function () {
var email = document.getElementById('email').value;
ajaxPost(server.register, {email: email}, function(result){
if(result.error){
document.getElementById('error').innerHTML = result.error;
} else {
document.getElementById('error').innerHTML = '';
alert('Registration successful!');
}
});
}
};
/**
* The server represents the code that runs on the server
*/
var server = {
/**
* The only method the client can call
*/
register: function (model) {
var error = server.validate(model);
if(error) return {error: error};
else
{
server.saveRegistration(model.email);
return {success: true};
}
},
validate: function (model) {
if(!model.email) return 'An email is required';
if(!framework.isValidEmail(model.email)) return 'This is not a valid email';
if(server.emailExists(model.email)) return 'This email already exist';
},
emailExists: function(email){
return SqlDatabase.some(x => x === email);
},
saveRegistration: function(email){
SqlDatabase.push(email);
}
};
/**
* This is a real SQL database!
*/
var SqlDatabase = [];
/**
* THe framework used by the server code.
* This code was not created by me
*/
var framework = {
isValidEmail: function(email) {
return email && email.indexOf('@') !== -1;
}
};
/**
* A utility function to simulate an ajax request in this example
* You can ignore it
*/
function ajaxPost(url, data, callback){
var result = url(data);
callback(result);
}