abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 03:00 | Komunita

    Projekt VideoLAN a multimediální přehrávač VLC (Wikipedie) dnes slaví 25 let. Vlastní, tenkrát ještě studentský projekt, začal již v roce 1996 na vysoké škole École Centrale Paris. V první únorový den roku 2001 ale škola oficiálně povolila přelicencování zdrojových kódů na GPL a tím pádem umožnila používání VLC mimo akademickou půdu.

    Ladislav Hagara | Komentářů: 0
    včera 18:11 | Humor

    Moltbook je sociální síť podobná Redditu, ovšem pouze pro agenty umělé inteligence - lidé se mohou účastnit pouze jako pozorovatelé. Agenti tam například rozebírají podivné chování lidí, hledají chyby své vlastní sociální sítě, případně spolu filozofují o existenciálních otázkách 🤖.

    NUKE GAZA! 🎆 | Komentářů: 1
    včera 18:00 | Humor

    scx_horoscope je „vědecky pochybný, kosmicky vtipný“ plně funkční plánovač CPU založený na sched_ext. Počítá s polohami Slunce a planet, fázemi měsíce a znameními zvěrokruhu. Upozornil na něj PC Gamer.

    |🇵🇸 | Komentářů: 2
    30.1. 18:22 | Komunita

    O víkendu probíhá v Bruselu konference FOSDEM 2026 (Free and Open source Software Developers’ European Meeting). Program konference je velice nabitý: 37 místností, 71 tracků, 1184 přednášejících, 1069 přednášek, prezentací a workshopů. Sledovat je lze i online. K dispozici budou jejich videozáznamy. Aktuální dění lze sledovat na sociálních sítích.

    Ladislav Hagara | Komentářů: 3
    30.1. 18:00 | IT novinky

    Společnost Nex Computer stojící za "notebooky bez procesorů a pamětí" NexDock představila telefon NexPhone, který může funguje jako desktop PC, stačí k němu připojit monitor, klávesnici a myš nebo NexDock. Telefon by měl být k dispozici ve třetím čtvrtletí letošního roku. Jeho cena by měla být 549 dolarů. Předobjednat jej lze s vratní zálohou 199 dolarů. V dual-bootu by měl být předinstalovaný Android s Linuxem (Debian) jako aplikací a Windows 11.

    Ladislav Hagara | Komentářů: 3
    30.1. 16:00 | Nová verze

    Byla vydána nová major verze 9.0 softwaru pro správu elektronických knih Calibre (Wikipedie). Přehled novinek v poznámkách k vydání. Vypíchnuta je podpora AI.

    Ladislav Hagara | Komentářů: 2
    30.1. 14:22 | Nová verze

    Wasmer byl vydán ve verzi 7.0. Jedná se o běhové prostředí pro programy ve WebAssembly. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.

    Ladislav Hagara | Komentářů: 1
    30.1. 12:22 | Zajímavý software

    V reakci na nepopulární plán Microsoftu ještě více ve Windows prohloubit integraci umělé inteligence Copilot, Opera na sociální síti 𝕏 oznámila, že připravuje nativní linuxovou verzi prohlížeče Opera GX. Jedná se o internetový prohlížeč zaměřený pro hráče, přičemž obsahuje všechny základní funkce běžného prohlížeče Opera. Kromě integrace sociálních sítí prohlížeč například disponuje 'omezovačem', který umožňuje uživatelům omezit využití sítě, procesoru a paměti prohlížečem, aby se tak šetřily systémové zdroje pro jinou aktivitu.

    NUKE GAZA! 🎆 | Komentářů: 8
    30.1. 06:22 | Zajímavý software

    NVIDIA vydala nativního klienta své cloudové herní služby GeForce NOW pro Linux. Zatím v beta verzi.

    Ladislav Hagara | Komentářů: 6
    30.1. 04:33 | Zajímavý projekt

    Open Gaming Collective (OGC) si klade za cíl sdružit všechny klíčové projekty v oblasti linuxového hraní počítačových her. Zakládajícími členy jsou Universal Blue a Bazzite, ASUS Linux, ShadowBlip, PikaOS a Fyra Labs. Strategickými partnery a klíčovými přispěvateli ChimeraOS, Nobara, Playtron a další. Cílem je centralizovat úsilí, takže namísto toho, aby každá distribuce udržovala samostatné opravy systému a podporu hardwaru na

    … více »
    NUKE GAZA! 🎆 | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (18%)
     (6%)
     (0%)
     (10%)
     (24%)
     (3%)
     (5%)
     (2%)
     (12%)
     (31%)
    Celkem 705 hlasů
     Komentářů: 22, poslední 29.1. 23:06
    Rozcestník

    MiniTest v našem projektu v Ruby on Rails

    25.9.2012 16:47 | Přečteno: 989× | Projekty | poslední úprava: 26.9.2012 12:20

    Představím vám, jak  děláme unit testy v našem projektu v Ruby on Rails (Rails). Předpokládám, že víte, co je gem a fixtures;) Svůj rozporuplný názor na jazyk Ruby si nechám na závěr.

    Motivace
    Nedávno jsme začali dělat s kamarádem Petrem na našem dalším magickém projektu - Hlídačky.cz. Jedná se o veselý komunitní portál, kde si rodiče mohou najít někoho na hlídání dětí - hlídačku. Zatím máme jen informační stránku a nabíráme hlídačky. Portál spustíme do měsíce.

    Oba už máme nějakou delší praxi v RoR, ale testy jsme moc nepoužívali. Přesto jsme si uvědomili, že u tohoto projektu je hlavním pilířem bezpečnost uživatelů a plynulý chod. Navíc jsme došli do fáze, kdy už člověk nestíhá sledovat, co dělal ten druhý nebo se nepamatuje celý kód.
    A tady nám hodně pomohly testy. V drtivé většině případů nám odchytily chyby ještě dříve než jsme na ně sami narazili. Např. změna metody u modelu měla za následek 500 error u několika stránek (funkcionální testy).

    MiniTest
    Od Ruby verze 1.9 se sice používá Test::Unit, ale pod kapotou už fičí Minitest::Unit. Přesto stále můžete používat

    require 'test/unit'

    aniž byste něco museli přepisovat.

    Pro integraci do Rails:

    gem install minitest-rails
    rails generate mini_test:install # vygeneruje minitest_helper.rb v adresáři test


    A už můžeme psát test. Jako příklad jsem si vybral test modelu Sitter. Hlídačkám říkáme sitterky:)
    Zábava začíná se syntaxí MiniTestu (MiniTest::Spec), který se liší od Test::Unit. Syntax MiniTestu je nicméně volitelná a stále se mohou používat asserty.


    Test::Unit

    assert_equal 10, Array.new(10).size

    MiniTest::Unit MiniTest::Spec

    Array.new(10).size.must_equal 10

    Věřím, že tento příklad zaujmul mnohé honiče nad syntaxí nebo lidi co viděli Cucumber:)


    Vytvoříme první tes v test/unit/sitter_test.rb

    require 'minitest_helper'

     

    class SitterTest < MiniTest::Rails::ActiveSupport::TestCase
      test "friends_that_used_sitter" do
        parent = parents :parent_sandra # nacteme rodice z fixtures
        sitter = sitters :sitter_will # nacteme hlidacku
        sitter.friends_they_used_her(parent).must_equal [parents(:parent_petr)]

    parent = parents :parent_sandra
        sitter = sitters :sitter_rick
        sitter.friends_they_used_her(parent).must_be_empty
      end
    end


    Na prvním řádku se nastavuje testovací prostředí včetně fixtures. Potom si vytvořime test modelu Sitter pomocí třídy MiniTest::Rails::ActiveSupport::TestCase. Zatím obsahuje jen jednu metodu. Ta testuje metodu friends_they_used_her modelu Sitter. V tomto konkrétním příkladě se zeptáme hlídačky Willa, jakým kamarádům rodiče Sandry, hlídala děti. Ano, naše hlídačka má trochu divné jméno Will. Will hlídal pouze Petrovi, který je kamarád Sandry. Proto testujeme, zda-li je tomu tak.

    V druhém případě se ptáme Hlídačky Ricka, jestli hlídal děti nějakému kamarádovi Sandry. On nehlídal nikomu. Na témeř posledním řádku se ujištujeme, že pole kamarádů je prázdné.

    Pro spuštění všech unit testů:

    rake test:units


    Osobně mi přišel výstup málo veselý a silně doporučuju odkomentovat jeden řádek v test/minitest_helper.rb

    require "minitest/pride"

    Vůbec bych nevěřil, že tak málo barviček může vnést do mého života tolik radosti.

    Tohle byl pouze jeden z příkladů. Testů tam máme samozřejmě více:) Lehkým nedostatkem je, že testovací data máme ve fixtures. Může se stát, že do fixtures přidáme dalšího rodiče, který bude kamarád se Sandrou. Touto nevinnou úpravou už se nám ale pokazí testy.

    Bohužel vytvářet všechna data za běhu testu v metodě setup mi přijde zase redundantní, protože rodiče potřebujeme nakonfigurovat i ve funkcionálních testech.

    Co používáte vy na unit testy v Rails?

    Poznámka na konec:

    Osobně bych šel do staticky typovaného jazyka s odvozováním typů, abychom se vyhli těm nejtriviálnějším chybám. Potom co jsem přečetl knihu Metaprogramming Ruby, často mívám deprese z DuckTypingu a strach z toho, co mi za objekt přijde jako paramater metody. Bude to mít metodu, co potřebuju? Bude ji mít i po spuštění tohoto příkazu? Má smysl žít ve světě, který je postaven na konvencích?

    Na druhou stranu Ruby má gem skoro na všechno a ušetří moře času, syntax s underscores je nádherná a přehledná, každý problém už řešil někdo přede mnou (google). Komunita je taky velká a veselá.

    PS: hledáme veselé mamky z Brna, které bychom chtěli pozvat na kafe a ukázat jim to. Potřebujeme si s někým popovídat, abychom vědeli, co tam máme změnit, vylepšit atd. Kdybyste o někom věděli, dejte mu odkaz na Hlídačky.cz.

           

    Hodnocení: 67 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    25.9.2012 18:13 Radek Miček | skóre: 23 | blog: radekm_blog
    Rozbalit Rozbalit vše Re: MiniTest v našem projektu v Ruby on Rails
    Osobně bych šel do staticky typovaného jazyka s odvozováním typů, abychom se vyhli těm nejtriviálnějším chybám.
    Statický typový systém může odhalit docela dost chyb – cituji z popisu jazyka Ur/Web, který je určen pro tvorbu spolehlivých webových aplikací:
    The signature of the standard library is such that well-typed Ur/Web programs "don't go wrong" in a very broad sense. Not only do they not crash during particular page generations, but they also may not:
    • Suffer from any kinds of code-injection attacks
    • Return invalid HTML
    • Contain dead intra-application links
    • Have mismatches between HTML forms and the fields expected by their handlers
    • Include client-side code that makes incorrect assumptions about the "AJAX"-style services that the remote web server provides
    • Attempt invalid SQL queries
    • Use improper marshaling or unmarshaling in communication with SQL databases or between browsers and web servers
    25.9.2012 20:25 dejvik | skóre: 12 | blog: vysatost
    Rozbalit Rozbalit vše Re: MiniTest v našem projektu v Ruby on Rails

    Ač to vypadá zajímavě, je to teprve na začátku. Jen dva díly tutoriálu, reference manuál nejde. Osobně bych potřeboval knihovnu pro napojení na Facebook, něco jako ORM atd. To univerzum knihoven je příliš malé.

    25.9.2012 22:41 Radek Miček | skóre: 23 | blog: radekm_blog
    Rozbalit Rozbalit vše Re: MiniTest v našem projektu v Ruby on Rails
    Mně referenční manuál funguje. Několik článků o jazyku Ur/Web napsal tento rok E. Z. Yang ve svém blogu.

    Jazyk Ur/Web jsem uvedl hlavně jako příklad toho, co je možné udělat. Více knihoven je k dispozici pro jazyk Haskell a framework Yesod nebo pro jazyk OCaml a framework Ocsigen. Nicméně Ur/Web má silnější typový systém s IMO velmi atraktivním pojetím záznamů.
    25.9.2012 23:06 phax7 | skóre: 34 | blog: PhaX_blog
    Rozbalit Rozbalit vše Re: MiniTest v našem projektu v Ruby on Rails

    Ten HelloWorld ocsigenu nevypadá z nejpřívětivějších:) Ale to je taky tím že už jsem spoustu let zvyklý na jiné jazyky...

    http://ocsigen.org/howto/helloworld

    25.9.2012 23:17 Radek Miček | skóre: 23 | blog: radekm_blog
    Rozbalit Rozbalit vše Re: MiniTest v našem projektu v Ruby on Rails
    Může to být i kratší:
    open Lwt
    open Eliom_content.Html5.D
    open Eliom_service
    open Eliom_parameter
    open Eliom_registration.Html5
    
    let main_service =
      register_service ~path:["hello"] ~get_params:unit
        (fun () () -> return (html (head (title (pcdata "Hello World of Ocsigen")) [])
                                   (body [h1 [pcdata "Hello World!"]])))
    
    26.9.2012 13:16 lmb
    Rozbalit Rozbalit vše Re: MiniTest v našem projektu v Ruby on Rails
    Hello world v Happstacku (Haksell) ;-)

    import Happstack.Server
    
    main = simpleHTTP nullConf $ ok "Hello, World!"
    
    26.9.2012 13:17 lmb
    Rozbalit Rozbalit vše Re: MiniTest v našem projektu v Ruby on Rails
    s/Haksell/Haskell/
    27.9.2012 17:57 nyan
    Rozbalit Rozbalit vše Re: MiniTest v našem projektu v Ruby on Rails
    Statický typový systém může odhalit docela dost chyb
    Nebo taky nemusi. Pokazde kdyz udelate
    
    void x(void *p) {
      ...
      some_struct* t = (some_struct*)p;
      ...
    }
    
    ...jde type checking do pr...kenny vohrady.
    pavlix avatar 28.9.2012 12:03 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: MiniTest v našem projektu v Ruby on Rails
    Suffer from any kinds of code-injection attacks
    To by se ten jazyk musel ale používat na všechno a řetězce v něm být pouhé texty, ne kód jako například SQL příkazy nebo javascript a kvůli některým vlastnostem by to v podstatě nemělo být ani HTML.

    To už by mi přišlo jako docela hezký framework. Nicméně s těmito vlastnostmi přichází neflexibilita. Tudíž je ten jazyk prakticky bez šance získat výrazný podíl na webových aplikacích a je vhodný jen pro určitou škálu projektů.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    28.9.2012 14:56 Radek Miček | skóre: 23 | blog: radekm_blog
    Rozbalit Rozbalit vše Re: MiniTest v našem projektu v Ruby on Rails
    To by se ten jazyk musel ale používat na všechno a řetězce v něm být pouhé texty
    Ano, on se používá na všechno – generuje se z něj C kód pro server, SQL pro databázi, HTML a JavaScript pro klienta.
    pavlix avatar 1.10.2012 01:34 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: MiniTest v našem projektu v Ruby on Rails
    Pak tedy viz druhý odstavec.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    stanger avatar 25.9.2012 19:24 stanger | skóre: 18
    Rozbalit Rozbalit vše Re: MiniTest v našem projektu v Ruby on Rails
    Jako nekolikanasobne certifikovany Javista jeste starym dobrym Sunem si myslim, ze ta deprese brzo prejde (sam jsem si ten prechod na Ruby a Rails prozil). Jinak doporocuju v Rails drzet pokryti co nejbliz 100% prave z podobnych obav (u Javy jsem par % dole toleroval).

    Pro testovani pouzivam kombinaci Cucumber a FactoryGirl. Ajax testuju Watirem.
    25.9.2012 23:22 retroslava | skóre: 9 | blog: TryCatch | Žižkoff
    Rozbalit Rozbalit vše Re: MiniTest v našem projektu v Ruby on Rails
    Array.new(10).size.must_equal 10 není MiniTest::Unit ale MiniTest::Spec. assert právě naopak je součást MiniTest::Unit. To musí vypadat ta aplikace teda, když netušíte ani takovýhle základní fakt. Snad se v tom kolega vyzná líp.
    Pozor! Jsem naprostý idiot. Co jsem napsal včera dnes už dávno neplatí. Zavazuji se, že budu diskutovat nezávazně.
    26.9.2012 00:08 phpGuru
    Rozbalit Rozbalit vše Re: MiniTest v našem projektu v Ruby on Rails
    u technickeho clanku povazuji takove osobni invektivy v diskuzi za kontraproduktivni.

    Prosim vysvetlete problematiku a upozornete klidne na nejake chyby, ale to jestli nejaky kolega nejakeho autora je takovy nebo makovy nevede opravdu k nicemu. Ja kdyz uz si dam tu praci a ctu nejakou diskuzi, tak se chci neco dozvedet a ne se prodirat mnozstvim narcistickych komentaru.

    Nekomentuji casto, ale tohle me opravdu nadzvedlo. Chapu , ze kdyz jsou zde blogy s nejakou politickou tematikou, tak ze se vede polemicka a afektovana diskuze, ale v takovehle atmosfere aby se nejaky autor bal neco referovat o sve praci.

    Dekuji.
    26.9.2012 00:36 retroslava | skóre: 9 | blog: TryCatch | Žižkoff
    Rozbalit Rozbalit vše Re: MiniTest v našem projektu v Ruby on Rails
    To já si jen vylévám dušičku. Zaráží mě když se někdo odváží publikovat jak něco udělal, když o tom asi nemá moc tušení. Potom si ten článek někdo přečte a nebere z něho moudra, která jsou naprosté blbosti. S takovýma lidma se potom běžně setkávám v práci a snaží se mě přesvědčit že já jsem ten neznalý.

    MiniTest::Spec je standardní součást minitestu. Je to jen oslazená syntaxe normálního MiniTest::Unit a uvnitř se stejně používá klasický assert. Normálně dál převažují klasícké testy přes asserty. Je to takovej kompromis mezi syntaxí RSpecu a MiniTestu. Zajímavější než tohle lepení zbytečností na hlavní objekt je fakt, že se tyhle styly můžou kombinovat. Hlavně to, že můžeme používat describe a it pro "okomentování testů" a uvnitř použít klasický assert. Tahle možnost se mi líbí pro integrační testy a hojně jí využívám.

    Jinak jako důkaz se můžete podívat na testy Rails. Ačkoliv jsou všechny přepsány do MiniTestu, používají klasický assert (schválně).

    Lepší?
    Pozor! Jsem naprostý idiot. Co jsem napsal včera dnes už dávno neplatí. Zavazuji se, že budu diskutovat nezávazně.
    26.9.2012 12:13 dejvik | skóre: 12 | blog: vysatost
    Rozbalit Rozbalit vše Re: MiniTest v našem projektu v Ruby on Rails

    Máte pravdu. Tušil jsem, že tam budu mít chyby; bylo to psáno v rychlosti:)  "must_equal" je v
    MiniTest::Spec a ne v MiniTest::Unit. Opravím to.

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.