Log in
Seblog.nl

Seblog.nl

Seb leert unittesten met PHP (deel 1)

Oké, dit wordt zo'n blogpost die ik voor mijn gevoel voor niemand schrijf, omdat het grootste deel van mijn lezers geen idee heeft van PHP en de lezers die wel een idee van PHP hebben naar mijn gevoel allang weten wat unittesten is. Maar hé, misschien ben jij ook wel zoiemand als ik, die wel z’n weg weet in PHP maar gewoon nooit aan unittesten is toegekomen. Bij dezen draag ik deze blogpost op aan jou.

Vorig jaar wist ik eigenlijk niet goed wat Git was, terwijl ik zag dat vrijwel iedereen dat gebruikte. Het was er gewoon nooit van gekomen, na HTML en CSS en PHP en MySQL en Javascript en al die duizend andere dingen die je moet leren als je een website wil bouwen. Dus leerde ik het afgelopen jaar Git (en Github) te gebruiken en daar ben ik heel blij mee. Het resulteerde in mijn eerste gemergede pull request, wat gewoon een knip-en-plakwerkje was, maar toch goed voelt.

Wie de PR leest ziet dat ik na mijn knip-en-plakwerkje nog werd gevraagd om ook even de test te knip-en-plakken. Spannend. Dus ik knipte en plakte en hoopte dat alles goed kwam. Ik hoorde er niets meer over en het werd gemerged, dus alles was blij en bloemetjes, maar er bleef wel een knagend gevoel over: hoe zit dat, geautomatiseerd testen?

Na enig research bleek dat zowel php-comments als Kirby (het CMS waar dit weblog op draait) hun tests uiteindelijk bestaan uit een class die PHPUnit_Framework_TestCase extend. Eén duckduckgo later vond ik phpunit.de, wat blijkbaar dé testsuite voor PHP is. Ik sloot alles af en besloot er later weer naar te kijken.

Later

Vandaag was ik dus vastbesloten om uit te zoeken hoe dit werkte. Of beter eigenlijk: ik kwam het weer tegen en raakte er langzaam in verzeild toen ik eigenlijk iets anders zou moeten doen.

Het begon allemaal heel simpel. Op de site van phpunit stond een link voor ‘Take the first steps’, die wel relevant leek. Daar stond het volgende stappenplan voor in de terminal:

$ wget https://phar.phpunit.de/phpunit.phar

$ chmod +x phpunit.phar

$ sudo mv phpunit.phar /usr/local/bin/phpunit

$ phpunit --version
PHPUnit 5.7.0 by Sebastian Bergmann and contributors.

Ik had al problemen bij stap 1 omdat mijn Mac kennelijk geen wget heeft. Ik probeerde nog wat met curl https://(…) -L | nano maar dat lukte ook niet geweldig. Uiteindelijk heb ik ‘m gewoon even via de browser gedownload. De overige stapjes werkten prima.

De volgende stap blijkt dan dus om in terminal naar de map te gaan waar het bestand phpunit.xml in zit, in mijn geval dus cd ~/code/php-comments/. Toen ik phpunit deed in die map, kreeg ik een foutmelding dat /vendor/autoload.php niet bestond. Dit los je op in de volgende twee stappen, die ik natuurlijk in de verkeerde volgorde deed:

  1. Roep phpunit aan met de bootstrap-vlag:

    $ phpunit --bootstrap vendor/autoload.php
  2. Installeer indien nodig eerst (!) de dependencies via composer.
    $ composer install

Toen ik nogmaals stap 1 uitvoerde kreeg ik het volgende:

$ phpunit --bootstrap vendor/autoload.php
PHPUnit 5.7.5 by Sebastian Bergmann and contributors.

.................................                                 33 / 33 (100%)

Time: 105 ms, Memory: 12.50MB

OK (33 tests, 82 assertions)

We kunnen dus gerust stellen dat mijn knip-en-plakwerkje alle tests haalt. Volgende stap is om zelf tests te gaan schrijven voor dingen die ik maak, maar dat bewaren we even voor een andere keer.

Homebrew Website Club

Bar Beton CS, Utrecht Centraal

Heb jij een eigen website? Post je meer op Twitter dan op je blog? Wil je een blog, maar weet je niet waar te beginnen? Heb je een domein liggen, maar kom je er niet aan toe er iets op te zetten?

Kom praten met mensen die óók hun eigen site hebben!

The IndieWeb is a growing people-focused alternative to the ‘corporate web’.

  • 17:30 - 18:30 CET: Stil schrijfuurtje.
    Bouw aan je site of schrijf een stukje.

  • 18:30 - 19:30 CET: Praatuurtje
    Demo's van IndieWebsites, praten over hoe dingen werken, ideeën uitwisselen, etc.

Voor beginners en gevorderden!

RSVP via webmention, of kom gewoon langs :)

Ik denk al de hele dag dat ik mijn verjaardag zie staan, maar het is 3 januari, niet 3 juni. En ik ben niet eens halfjarig, want 6 + 6 = 12.

Vorig jaar was mijn (niet uitgesproken) goede voornemen op het gebied van code om meer te leren over Git, want dat leek iedereen die ik pro vond te gebruiken. En dat is gelukt! Ik snap hoe Git werkt, zowel via hun desktop-app als via de CLI, en ik doe dingen met commits, branches, repo's en gister is er zelfs een pull request van me gemerged.

Dit jaar wordt mijn (bij dezen uitgesproken) goede voornemen om te gaan unit-testen. Of in ieder geval iets van tests in mijn programmeren in te bouwen, cuz that's how the pro's do it! Op dit moment maak ik gewoon steeds allemaal wijzigingen en hoop ik dat het werkt – wat vaak niet het geval is op het eerste moment. Op naar een jaar meer secuur werken!

Another take on uploading screenshots to a Micropub Media Endpoint

Over the last months I’m on IRC more often. I like the simplicity of sending plain-text messages, but from time to time I like to send a picture as well. The best way to do that on IRC is to upload the file somewhere else and send a link. Uploading files can be a hassle though.

I must admit that this problem is somewhat born because I already found a solution for it elsewhere. I followed Aaron’s recipe for creating a folder that uploads images, but for the times I needed it, I found it tedious to drag my screenshots to that folder. So here’s my alteration of it.

My workflow is nearly the same, but I choose the type ‘Voorziening’ (what’s that in English?), which makes it available in the right-click-menu. I can just select a file, right-click, and go to Voorzieningen > Upload to Media Endpoint.

I let it accept images, but you can go for documents in general as well, and the rest of the workflow is the same as Aaron’s. (Make sure to pass the input to the shell script as arguments!) The only thing is that it will receive a list of files, so I changed the shell script to:

for f in "$@"
do
    curl -i -F "file=@$f" -H "Authorization: Bearer xxx" https://example.com/media-endpoint | grep Location: | sed -En 's/^Location: (.+)/\1/p' | tr -d '\r\n' | pbcopy
done

Note that this uploads multiple files and only saves the last url to the clipboard. I just select one file per upload, so that will be fine.

Meer laden