# create a laravel project
composer create-project laravel/laravel app
# create alias to quick access phpunit
alias phpunit=vendor/bin/phpunit
# create unit test folder
mkdir tests/unit
# create a unit test for Product model
php artisan make:test unit/ProductTest
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | class ProductTest extends TestCase
{
protected $product;
public function setUp()
{
$this->product = new Product('Fallout 4', 59);
}
/** @test */
public function a_product_has_a_name()
{
$this->assertEquals('Fallout 4', $this->product->name());
}
/** @test */
public function a_product_has_a_price()
{
$this->assertEquals(59, $this->product->price());
}
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | class Product extends Model
{
protected $name;
protected $price;
public function __construct($name, $price)
{
$this->name = $name;
$this->price = $price;
}
public function name()
{
return $this->name;
}
public function price()
{
return $this->price;
}
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | class OrderTest extends TestCase
{
/** @test */
public function an_order_consists_of_products()
{
$order = $this->createOrder();
$this->assertEquals(2, count($order->products()));
}
/** @test */
public function an_order_can_determine_the_total_cost_of_all_its_products()
{
$order = $this->createOrder();
$this->assertEquals(66, $order->total());
}
protected function createOrder()
{
$order = new Order;
$product = new Product('Fallout 4', 59);
$product2 = new Product('Pillowcase', 7);
$order->add($product);
$order->add($product2);
return $order;
}
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | class Order extends Model
{
protected $products = [];
public function add(Product $product)
{
$this->products[] = $product;
}
public function products()
{
return $this->products;
}
public function total()
{
return array_reduce($this->products, function($carry, $product) {
return $carry + $product->price();
});
}
}
|
No comments:
Post a Comment