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. AvatarMaryam

    Hej!
    Jag har samma problem! Kan någon vara snäll och förklara på ett lätt sätt steg för steg hur man ska skapa den här djävla SRU filen?

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

      Som beskrivningen på sidan, så går de till. Men är de någon specifik blankett som är problemet, eller har ni lyckas få in två lika dana blanketter?

      Repeterar instruktionerna från sidan nedan:

      1. Skapa inlämanre och generear INFO SRU.
      2. Välj, blankett räkenskapsschemat och rätt period, samt fyll i Orgnummer (AB inleds med 16)
      3. Lägg till blanketten
      4. Fyll i uppgifterna och klicka på lägg till uppgifter
      5. Välj, blankett skattemässiga och rätt period, samt fyll i Orgnummer
      6. Lägg till blanketten
      7. Fyll i uppgifterna och klicka på Spara blankett under alla fält
      8. Ladda hem de två filer som har skapats (INFO.SRU och BLANKETTER.SRU)
      Reply
  2. AvatarMaryam

    Hej!
    Jag har samma problem fast hängde inte med det ni sa! Kan någon vara snäll och förklara på ett lätt sätt steg för steg hur man ska skapa den här djävla SRU filen?

    Reply
  3. AvatarAnn Gomér

    Tack!! Jag lyckades få in filerna med ditt program, är så tacksam!!

    Reply
  4. AvatarLena N

    Hej, ett mycket bra hjälpmedel. Men i år kunde jag inte skicka filen till skatteverket pga att redovisningsperioden som slutar 31 jan 2016 inte går att välja. Använde P4 men fick då felmeddelande från skatteverket.

    Reply
      1. AvatarPål Brattberg

        Fett! Kommer man kunna skapa SRU även med brutet år 15-04-30 – 16-05-01 då?

        Såg att inga ändringar gjorts på GitHub på 3 år, men du kanske vidareutvecklar utanför GitHub?

        Behöver du hjälp så kan jag rycka in!

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

          Hej,

          De är uppdaterat nu för beskattningsåret 2016.

          Jag har de på sida om GitHub, men de är mest bara datafilen som har blivit uppdaterad med de ändringar som skatteverket inför ett par gånger per år.

          Reply
  5. AvatarOlle

    Hej,

    När kommer det bli möjligt för mig med brutet räkenskapsår (2015-07-01 – 2016-06-30)?
    Tack för en grym tjänst som hjälpt mig de senaste två åren! Bra jobbat!

    Reply
  6. AvatarPeter

    Jag ber att få tacka för denna förnämliga tjänst.
    Visst vill jag gärna bidra till utveckling av programmet. Men, då jag fyllde i ett belopp blev det inte överfört till totalbelopp för fakturaunderlag och det gick inte att göra överföringen.
    En lite bugg?

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

      Jag har noterat att PayPal inte tycker om kommatecken “,” i beloppet. Så enklast är att ange beloppet i hela kronor och helt enkelt ta bort decimal delen.

      Reply
  7. AvatarJonna

    Hej,
    Har ett AB med räkneskapsår 20150101-20151231
    Valde perioden P4 och fyllde i och sparade blanketterna “Skattemässiga justeringar INK2S 2015” och “Räkneskapsschema INK2R 2015”.
    Får följande felmeddelanden:
    En giltig blankettyp förväntades. INK2R 2016P4 är inte ett giltigt postnamn.
    INK2R-2016P4 är en ogiltig blankettyp.
    INK2S-2016P4 är en ogiltig blankettyp.

    Förstår någon problemet?
    Tack på förhand

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

      Hej,

      Förstår inte riktigt hur de kan komma sig att de står 2016 där. De ska bara gå att få 2015, vilket jag har testat idag med. Årtalet anger vilket bokslutsår de gäller. Period 4 har vi inte kommit in i ännu för 2016.

      Om 2016 ersätts med 2015 så bör de fungera mycket bättre.

      Reply
  8. AvatarMatts-Ola

    Jättebra gjort. Upplevde samma problem som David 9/7-15.

    Reply
  9. AvatarAnnsofie Isaksson

    Hej
    Helt underbart att du löst detta!
    Hoppas bara att jag kan få lite hjälp med denna akuta fråga:)

    Har ett bolag som skall skall lämna in sin deklaration nu innan den siste men vet inte varför felet uppstår på Blanketten för INK2R:
    Person-/organisationsnummer i posten IDENTITET är inte skatteregistrerad för aktuellt inkomstår.
    Person-/organisationsnummer i posten IDENTITET är inte rätt fysisk- eller juridisk person för denna blankett.

    Bokslutsåret är den 31 aug 2015 och jag har valt är P3.

    Reply
    1. AvatarJohan Landin

      Jag har samma problem fast för räkenskapsåret 20160101-20161231.

      Tack för ett förträfflig tjänst!

      Reply
  10. AvatarMas

    Hej,

    Tack för en fin tjänst. Jag försöker ladda upp SRU filer för ett aktiebolag med räkenskapsår som slutar 2014-12-31. INFO.SRU är ok. Jag får dock följande felmeddelande när jag försöker ladda upp BLANKETTER.SRU på Skatteverkets filöverföringstjänst:

    Följande fel har påträffats i BLANKETTER.SRU
    Rad Felmeddelande
    1 En giltig blankettyp förväntades. INK2R 2014P4INK1 är inte ett giltigt postnamn.
    1 INK2R-2014P4INK1 är en ogiltig blankettyp.
    5 INK2R-2014P4INK1 är en ogiltig blankettyp.
    9 INK2R-2014P4INK1 är en ogiltig blankettyp.

    Uppskattar din hjälp.

    Reply
  11. AvatarHans Johansson

    Kan bara hålla med tidigare kommentarer. Stort tack för att du löste denna stora brist hos skattmasen :-) Jag satte in ett litet ekonomiskt bidrag som tack för er hjälp.

    Reply
  12. AvatarMaria

    En räddare i nöden, verkligen superbra hjälp för oss sista-minuten-människor!

    Reply
  13. AvatarLinda

    Stort tack för en supertjänst! Räddade även mig i 11:e timmen. Ett problem jag stötte på när jag försöker ladda upp INK4DU är felmeddelande “UPPGIFT 8100 förekommer mer än en gång”, samt samma för 8101 osv. Varje ny delägare genererar samma uppgiftsnummer – vilket verkar vara enligt instruktion – men skatteverkets inläsning genererar dessa felmeddelanden. Vet du vad det kan vara för problem?
    Tack igen!
    Linda

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

      Vet inte varför detta uppkommer, har ställt frågan till skatteverket då programmet följer den specifikation som de har lagt ut. Återkommer med svar så fort jag vet något.

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

        Svaret från Skatteverket: “När det gäller denna blankett via SRU-fil så blir det en blankett för varje delägare”.

        Så lösningen är att lägga varje delägare i en egen INK4DU blankett.

        Reply
  14. AvatarJacob Hamacher

    Fantastiskt fin tjänst! Äntligen går det att lämna deklarationen helt elektroniskt. Och jag som var sen med pappersblanketten. Stort tack!

    Reply
  15. AvatarHåkan Blixt

    Tre frågor men först! Håller med om att det är otroligt att Skatteverket inte har en smidigare funktion angående dessa filer.

    1 Jag skriver org.nr med 16 i början med lyckas bara skicka in “blankett” och “info” Ink2R och “info” Ink2S. “Blankett” för Ink2S får däremot ett felmeddelande som säger: RAD 2 (Person-/organisationsnummer i posten IDENTITET (16XXXXXXXXXX) är inte skatteregistrerad för aktuellt inkomstår.. )Vad gör jag fel?

    2 Det andra felmeddelandet lyder som följande: RAD 4 (Blanketten innehåller inga andra uppgifter än person-/organisationsnummer och namn och skall därför inte lämnas in.)

    3 Kan heller inte fylla i om något ombud har varit med vid deklarationen eller om det har varit revision. Vad ska det stå i rutan?

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

      Svarar på frågorna en i taget nedan:

      1. Lite osäker på vad de kan bero på. De som står i INFO.SRU är bara uppgifter om själva personen/organisationen som lämnar in uppgifterna. Så vilket person- eller orgnummer som helst ska vara giltiga i den. Däremot i blanketter är de viktig att du valt rätt period. Om t.ex. bolaget har bokslut sista december så ska perioden P4 användas. P4INK1 ska endast användas för ex. dödsbon så välj inte den om så inte är fallet.

      2. Det meddelandet tyder på att inga uppgifter blivit sparade som de ska. När uppgifterna matats in för en blankett är de viktigt att dessa sparas innan du lägger till en ny blankett. Och då även sparar den sista blanketten som läggs till.

      3. De rutorna ska ha ett X i sig. Om du låter musen ligga över inmatningsrutan någon sekund så ser du dels vilken SRU kod rutan ha samt vilka värden som den förväntas få in.

      Reply
      1. AvatarLudvig Ericson

        Angående texten “[…] är inte skatteregistrerad för aktuellt inkomstår” så har du helt rätt, det beror alltså på att man valt fel period. Det gick bra med 2013P3 förra året, men i år var de petiga med att det skulle vara 2014P4. Skoj! Tack så himla mycket för hjälpen!

        Reply
  16. AvatarTomas

    Letade efter SRU definitionerna för att generera filerna själv – hittade dit demo + github; perfekt!
    Tack för att du publicerat din kod och ska testa loss med Jasmine framöver.

    Lägg till en flattr -knapp så vi kan stödja dig :)

    Reply
  17. AvatarDavid

    Ett stort tack till Björn P som gjorde denna fantastiska samhällstjänst.
    Som så många andra små företagare försökte jag i lugn och ro under semestern göra en e-deklaration på Skatteverkets hemsida, i god tid innan slutdatumet 3 augusti. Vilken irritation att upptäcka att Skatteverket har lurat oss in i en fälla: det går visst att lämna in första sidan elektroniskt, men de obligatoriska bilagorna kräver skatteverkets egen filformat sru dock utan minsta hjälp att skapa dem!
    Tack Björn att vi slipper betala onödiga förseningsböter!
    Skicka gärna en faktura till RSV för att du har gjort deras jobb åt dem!

    Reply
  18. AvatarPatrik Berntsson

    Tack vare denna sida kunde jag skapa filerna att överföra till skatteverket i tid! Tack för denna tjänst. Ovärderligt!

    Reply

Leave a Reply

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