Testy funkcjonalne – mega czad.

Po pierwszym kontakcie z testami (cakePHP) nie czułem szczególnej mięty do testów. Jedynie unit testy modeli wydały mi się interesujące i przydatne. Jednak dziś zacząłem grzebać w testach funkcjonalnych (kontrolerów) w aplikacji Ruby on Rails i muszę przyznać, że nie miałem racji. Spójrz na ten kod:

  test "should kick off normal user from index" do
    login_user :normal
    get :index
    assert_redirected_to login_path
  end

Sprawdza on czy zwykły user, przy próbie dostępu do do akcji “index” zostanie przekierowany do strony logowania. Teraz nie muszę się bać, że wpuszczę nieuprawnionego użytkownika do “adminowej” części aplikacji. Wypas.

(Być może jestem niesprawiedliwy w ocenie cakePHP. Nasze drogi rozeszły się dobry rok temu. Być może teraz testy działają w nim teraz naprawdę dobrze. Ale kiedy jeszcze w cake’u pracowałem naprawdę trudno było polegać na testach).

Share Button

Co nowego w cake 2.0?

Nowy, lepszy, szybszy model ju w drodze… znalazłem ciekawy artykuł z krótkim podsumowaniem ,który zdecydowanie polecam
http://nuts-and-bolts-of-cakephp.com/2011/08/14/under-the-hood-of-cakephp-2-0/

Share Button

Float vs. setlocale()

Mark Story wpadł na ciekawy problem, który opisał na swoim blogu.

W dużym skrócie, jeśli używasz setlocale() to rzutowanie typów danych może działać nieprzewidywalnie. Polecam wpis Marka. Jednak grzebiąc nieco po php.net okazało się, że jest jeden sposób na zmianę typu, która bierze pod uwagę locale:

$pi = 3.141593;
echo (float)(string)$pi ."\n";
var_dump(setlocale(LC_NUMERIC, 'pl_PL.utf8'));
$polishPi = 3.141593;
// poniżej "problematyczne" rzutowanie
echo "string: " . (string)$polishPi ."\n";
echo "float: " . (float)(string)$polishPi ."\n";
echo "floatval(): " . floatval((string)$polishPi) ."\n";
echo "double: " . (double)(string)$polishPi ."\n";
echo "real: " . (real)(string)$polishPi ."\n";

//settype wydaje się działać dobrze z setlocale
var_dump(settype($polishPi, "double")); // można użyć "float"
echo "settype(): " . $polishPi ."\n";
var_dump(gettype($polishPi));
var_dump($polishPi*2);
var_dump(gettype($polishPi*2));

out:

3.141593
string 'pl_PL.utf8' (length=10)

string: 3,141593
float: 3
floatval(): 3
double: 3
real: 3

boolean true

settype(): 3,141593

string 'double' (length=6)

float 6,283186
string 'double' (length=6)
Share Button