TDD with Jasmine

By | November 22, 2013

Today I was asked if I could make the definition files that we must send to the Swedish tax agency. This files have a specific format that we can get our description on from there website.

I though this was a perfect situation to test TDD with JavaScript using Jasmine.

I began to download the required files from the Jasmines website. All documentation are on that site as well so I began with the mandatory hello test (as mentioned in Goodbye Hello World).

describe("Hello test", function() {
    it("says hello", function() {
        expect(helloTest()).toEqual("Hello test!");
    });
});

Opening the SpecRunner.html that comes with jasmine gives the following expected result
mandatoryFailingTest

So to get it to pass, we simply creates the following method in our source js file:

function helloTest() {
    return "Hello test!";
}

Now we got it up and running, rerunning the tests is as simple as pressing F5 in the browser. So it is time to start implementing the behaviours. The implementation will be done in Swedish in this case since the domain is in Swedish.

I started with the INFO.SRU and defined each object in that and what it will generate. Then we do the same with BLANKETTER.SRU. By driven the development in this way at the end we had a blankett class and a fil class that can contain multiple blankett objects.

So I started to defining the INFO.SRU component with the code below. I did not define all at once but with one failing test at the time and then correcting it in the implementation.

describe("Databeskrivning", function() {
    var databeskrivning = new Databeskrivning();
    
    it("Ska ha en start", function() {
        expect(databeskrivning.databeskrivningStart()).toEqual("#DATABESKRIVNING_START");
    });

    it("Ska ha ett slut", function() {
        expect(databeskrivning.databeskrivningSlut()).toEqual("#DATABESKRIVNING_SLUT");
    });

    it("Ska omsluta innehållet", function() {
        var innehåll = databeskrivning.generera();
        expect(innehåll[0]).toEqual("#DATABESKRIVNING_START");
        expect(innehåll[innehåll.length - 1]).toEqual("#DATABESKRIVNING_SLUT");
    });

    describe("Generering av obligatoriska uppgifter", function() {
        it("Ska ha dagens datum och tid i rätt format", function() {
            expect(databeskrivning.skapad()).toMatch(/#SKAPAD \d\d\d\d\d\d\d\d \d\d\d\d\d\d/);
        });

        it("Ska ha produkt som SRU", function() {
            expect(databeskrivning.produkt()).toEqual("#PRODUKT SRU");
        });

        it("Ska ha program som SRU-Maker", function() {
            expect(databeskrivning.program()).toEqual("#PROGRAM SRU-Maker");
        });

        it("Ska ha filnamn som BLANKETTER.SRU", function() {
            expect(databeskrivning.filnamn()).toEqual("#FILNAMN BLANKETTER.SRU");
        });
    });
});

After implementing this I rerun the test and got a green result =).
allTestPasses

I continued in the same way with the rest of the system. Even that it may have felt slower then just hacking it directly without testing I caught spelling errors and also drew the design. So when I started my reference implementation it was already god to go and most of my problems was with the html and JavaScrip code to handle the UI layer.

So after some implementation of the reference implementation I got the following result.
referenceIplementation

The final code can be download from github.

I also published a live demo, in swedish, that can be found at http://aidium.se/demo/srumaker

90 thoughts on “TDD with Jasmine

  1. AvatarKarl-Johan

    Vad jag kan se funkade det fint i år (2018 års deklaration) med. Inga klagomål från Skatteverket.
    Tack för att du tog dig tid att göra tjänsten och hålla den vid liv. Skickade en slant.

    Reply
  2. AvatarHenrik Garbergs

    Tack för en bra tjänst! Skickar en slant för detta.
    Jag fick problem med Ja/Nej-frågorna i slutet av INK2S, men hittade en annan webbsida där det framgick att giltig input var stort “X”. Det gäller alltså fälten 8040, 8041, 8044 och 8045 i filen BLANKETTER.SRU.

    Reply
  3. AvatarVilsenFöretagare

    Tusen tack. Ligger på minus, men kommer lägga in en slant nästa år..då företaget går + !

    Reply
  4. AvatarErik

    Betan funkade utmärkt! Tack för en fin tjänst! Skickade en slant via Paypal.

    Reply
  5. AvatarStaffan Kolhammar

    Hej kära vän och hjälte!

    Jag ska deklarera för en Ideell förening, och blev av Skatteverket ombedd att fylla i INK3SU, och då punkt 4.7 “Övriga intäkter”. När jag generar INK3SU på den här fantastiska sidan, så är 4.7 “Föreningar/Trossamfund: Kostnader: Medlemsverksamhet”, och jag hittar inte någon punkt som heter “Övriga intäkter”.

    Vet du möjligtvis varför, och hur jag kan ta mig framåt?

    Tusen tack, det här är en underbar sida!! <3
    Staffan

    Reply
    1. Björn PalmqvistBjörn Palmqvist Post author

      De är en ändring som skatteverket har gjort inför period 4. Se https://skatteverket.se/foretagochorganisationer/inkomstdeklaration/deklareraforenforening/safyllerniibilagansarskilduppgiftforideellaforeningarochregistreradetrossamfund.4.1927c51b15e7ee438722018.html för information om hur den fylls i. Är de så att det gäller en tidigare period så kan du prova srumaker.se/beta med Chrome, den har de gamla utseendet på blanketterna för period 3 och bakåt. Hoppas de kan hjälpa.

      Reply
  6. AvatarJens

    Filerna fungerar inte hos Skatteverket.
    Någon nämner att man ska ladda upp båda filerna samtidigt men det tillåter ju inte Skatteverket.
    Jag får bara och kan bara ladda upp en fil I taget för att sen göra överföring.

    Reply
    1. Björn PalmqvistBjörn Palmqvist Post author

      Om då går in på tjänsten filöverföring, under företagstjänsterna, och väljer sedan “Inkomstdeklaration” vid valet av filtyp. Sedan när du väljer “Överför filer” så ska den kräva både INFO.SRU och BLANKETTER.SRU.

      Hoppas de hjälper.

      Reply
  7. AvatarDag

    Är det någon som vet vilken period man skall välja för räkenskapschemat? Det finns ju inte för hela 2017!

    Reply
    1. AvatarDag

      Med den nya betaversionen man kunde klicka fram sig till, som har några flikar upptill, bla “Result” så gick det bra. Nu framgår det tydligt vilken period man skall välja, nämligen den där ens sista redovisningsdag infaller i. Vill också tipsa alla om att som uppgiftslämnare skall det inte stå t ex aktiebolaget man skickar in för utan den biologiska personen som fyller i uppgifterna. Bra program!

      Reply
  8. AvatarMartin

    Hej,
    tack – du räddade mig från förseningsavgiften. Fungerar riktigt smidigt.
    Hade lite problem med 8040, 8041, 8044 8045 precis som Lena beskrev och där kan tjänsten förbättras. Kanske även en import från en existerande sru fil?
    Har skickat över en slant som tack!

    Reply
    1. AvatarGlenn

      Hej och tack för en fantastiskt bra tjänst – avser skicka en slant.

      Det märkliga har inträffat att jag i det sista bolaget av tre jag deklarerar får jag problem med 8041 osv. Hur jag än fyller i dessa fungerar det inte. Deklarerat två andra bolag för några veckor sedan utan bekymmer. Ser att du hänvisar till att ta bort överflödiga alternativ. Men filerna är ju inte redigerbara såvitt jag kan förstå?

      Reply
      1. Björn PalmqvistBjörn Palmqvist Post author

        För att ta bort en tom rad, dvs en rad utan värde, som de har kunnat blivit med t.ex. 8041 så kan du öppna filen i Anteckningar/Notepad och ta bort den raden helt.
        Buggen som genererar dessa tomma rader är nu åtgärdad så att detta inte ska kunna inträffa igen. Tack för att ni uppmärksammade de felet.

        Reply
        1. AvatarGlenn

          Man tackar! Utmärkt snabb och bra tjänst – och respons här. Körde igenom det för en halvtimme sedan och den accepterades omgående av SKV. Kommer en slant idag. /GV

          Reply
  9. AvatarJan-Olof

    Hej,
    Deklarerade företaget via Skatteverkets e-tjänst, (skall vara gjort senast 1/8). Såg då att man kan inte lämna in INK2S samt INK2R digitalt som med huvudblanketten för inkomsdeklaration 2. Jag ringde Skatteverket som upplyste mig om att om jag postar blanketterna ses det som att hela deklarationen lämnas på papper med risk för dryga förseningsböter. Letade efter program som kan skapa SRU filer, mestadels där licenser krävs eller man betalar för tjänsten.
    Hittade SRU Maker just innan jag tänkte betala en licens för denna tjänst.
    Det fungerade perfekt, testade på Skatteverkets testsida och fick inga fel.
    Jag har nu skickat in mina filer till Skateverket. Skickade ett bidrag till er på Paypal.
    Kanonbra tjänst och program.

    Reply
  10. AvatarRobert

    Hej, Jag driver en ekonomisk förening och mitt organisationsnummer verkar inte fungera då.
    Kan man göra något åt det?

    Reply
    1. Björn PalmqvistBjörn Palmqvist Post author

      En ekonomsikförenin bör ju vara en juridisk person, juridiska personer använder 16 som “sekel” så ex ett aktiebolag med organisationsnumret 556000-0100 skrivs som 165560000100.

      Hoppas de hjälper.

      Reply
  11. AvatarPer Wahlström

    När jag testar filen får jag “felaktigt filformat” från skatteverket. Är det bara jag?

    Reply
    1. AvatarPer Wahlström

      Hittade felet, man måste skicka båda filerna samtidigt! Skickar pengar. Varför har inte skatteverket denna tjänst själva?

      Reply
  12. AvatarOlof Malmberg

    Hej! Jag är trogen bidragare då er tjänst är ypperlig för en som har väldans liten omsättning :-) Stort tack!

    Jo, i årets INK2R på Resultaträkningsdelen, där stämmer inte många nummer på rutorna. Jag fyllde i efter vad det stod och hoppas koderna stämmer när jag nu skickar in blanketterna till SKV.

    Mvh/Olof

    Reply
  13. AvatarTor Fransson

    Tack för en bra tjänst, skall använda den för att skicka 2017 års deklaration snart :-)

    Skickade 10 semlor i efterskott via PayPal!

    Reply
  14. AvatarTor Fransson

    Hej!

    Den INK2R jag laddade ned igår från skatteverket, gällande räkenskapsår 170101-171231 har några fält som inte stämmer överens med SRU Maker:
    2.49 är nu Skatteskulder
    2.48 är nu Skulder till övriga företag det finns ett ägarintresse i, och Övriga skulder

    Lite att se upp med där, alltså!

    Reply
      1. Björn PalmqvistBjörn Palmqvist Post author

        De var inte helt uppdaterat då skatteverket gjort en förändring av formatet i december. Nu är det uppdatera så att de ska stämma överens.

        Reply
        1. AvatarLena

          Hej jag får inte rad 8040, 8041, 8044 8045 att fungera hos skatteverket. Stort kryss i den ena o 0 i den andra , men skatteverket skriver att det är fel format.

          Reply
          1. Björn PalmqvistBjörn Palmqvist Post author

            Skatteverket vill bara ha X för de som är kryssat, de andra ska inte finnas med alls. De är nog därför den inte går igenom. Om du tar bort raden helt som inte ska vara kryssade ska de gå bättre.

            Hoppas de hjälper.

  15. AvatarRichard Treffner

    Stort tack för briljant tjänst. Visma ville ha tre tusen spänn för att aktivera det deklarationsstöd som krävs för att skapa filerna. Ni fick ett litet tack för hjälpen ni också!

    Ett tips är att förtydliga att man ska skriva in ett stort X i kryssrutorna (inte litet x eller ja/nej) det tog mig ett tag att förstå.

    Reply
  16. AvatarOskar Lundahl

    Fantastisk tjänst
    Man vill stödja dig. Kanske skaffa swish?

    Reply
  17. AvatarPeter Rosell

    Tackar för denna sidan. Kul med TDDn. Såg i “Uppdateringar”-listan att du gjort lite småändringar för att matcha blanketterna för 2016. Ser inte några commits för det på github. Har du glömt att pusha. Såg på INK4DU att du hade en ruta om utlänskt bolag. Jag ser ingen sån ruta på pappersblanketten. Har den försvunnit från pappersblanketten de senaste åren eller är det nån specialgrejer för valideringen av org.nr som behövs för SRU-filerna?
    /Peter

    Reply
  18. AvatarAnders Lundgren

    Fungerade utmärkt!
    Har kunnat ta fram hela flödet från bokföring till deklaration och årsredovisning tack vare denna tjänst tillsammans med Bokio och Promikbook.

    Vänliga hälsningar Anders

    Reply
  19. AvatarCarl Fredrik Leanderson

    Fantastisk fin tjänst! Stort tack! Med vänlig hälsning

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *