Esta vez, vamos a partir del ejemplo de cuentas bancarias sobre el que hablamos en el capítulo anterior. Modificando el test unitario con el que terminamos:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import { BankAccount } from "../original/BankAccount";
describe("The bank account", () => {
describe("when customer does a transfer">, () => {
it("should decrease its balance from an account with 0 balance", () => {
const a_bank_account = new BankAccount();
const irrelevant_transfer_amount = 100;
a_bank_account.doTransfer(irrelevant_transfer_amount);
expect(a_bank_account.balance).toEqual(0 - irrelevant_transfer_amount);
});
});
});
Estamos probando que el balance de una cuenta bancaria, que inicialmente parte de un saldo 0, se ve disminuido cuando el usuario realiza una transferencia. El test parece correcto, pero, ¿no estamos presuponiendo demasiadas cosas?
¿Que pasa si el día de mañana el constructor por defecto de “BankAccount” no devuelve una cuenta bancaria con saldo 0? ¿Y si cambiamos los parámetros del constructor por defecto? Efectivamente, nuestro test empezaría a fallar, dándonos información difusa de lo que está fallando en nuestro sistema.
En este caso deberíamos hacer un test independiente para comprobar que una nueva “BankAccount” parte de un balance inicial de 0. Así, si en el futuro modificamos el constructor sólo fallará este nuevo test, acotándonos bastante el problema.
Por otro lado, deberemos modificar nuestro test original para no depender del test que hemos comentado previamente, partiendo explícitamente del estado que queremos:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import { BankAccount } from "../original/BankAccount";
describe("The bank account", () => {
describe("when customer does a transfer", () => {
it("should decrease its balance from an account with 0 balance", () => {
const a_bank_account = BankAccount.with_balance_0(); // Given.a_bank_account_with_0_balance();
const irrelevant_transfer_amount = 100;
a_bank_account.doTransfer(irrelevant_transfer_amount);
expect(a_bank_account.balance).toEqual(0 - irrelevant_transfer_amount);
});
});
});