Voltando ao PHP depois de trabalhar por um bom tempo em JavaScript e deixando Jasmine cuidar de minhas necessidades de teste, senti muita falta da facilidade com a forma como você escreve essas especificações e temia ter que estender alguma classe de caso de teste base.
Então, decidi tentar fazer algo a respeito e conseguir algo que quase se parecia com as especificações familiares do Jasmine :
<?php
require_once 'calc.php';
describe('calculator', function () {
$calc;
beforeEach(function () use (&$calc) {
$calc = new Calculator();
});
describe('adds', function () use (&$calc) {
it('positive numbers', function () use (&$calc) {
expect($calc->add(1, 2))->toBe(3);
});
it('negative numbers', function () use (&$calc) {
expect($calc->add(-4, -5))->toBe(-9);
});
it('with zero', function () use (&$calc) {
expect($calc->add(0, 10))->toBe(10);
});
});
describe('divides', function () use (&$calc) {
it('positive numbers', function () use (&$calc) {
expect($calc->div(8, 2))->toBe(4);
});
it('throws on division by zero', function () use (&$calc) {
expect(function () use (&$calc) { $calc->div(1, 0); })->toThrow();
});
});
});
?>
Se você estiver interessado, dê uma olhada no projeto no GitHub e sinta-se à vontade para me enviar uma mensagem se achar útil.