Kategori Arkiv: SharePoint Online

Wicked spændende meddelelse

At gøre annonceringer er egentlig ikke min ting, men denne gang, Jeg er virkelig og virkelig begejstret over den bare-lanceret Slalom Big Apple SharePoint-websted. 

Jeg arbejder på Slalom consulting og administrere portaler & Samarbejde praksis.  Big Apple hjemmeside er "min" site for min praksis her i New York.  Jeg har længe ønsket en af disse. Jeg er sikker på at mange SP pro's har ønsket for noget lignende.  Hvor mange gange har vi kiggede på vores egen virksomhedens offentlige websted, eller en af kunder og set dem bygge det ud og bare at vide, og som ønsker, at de ville bygge det på SP?  Vi alle ved, at SP er temmelig god til slags ting, men det er ikke meget almindelig. 

Godt, verdener endelig justeret rigtigt for mig – SP Online er virkelig billigt, Jeg havde det rigtige team og tid nok til faktisk at gøre det.

Det var en fantastisk rejse at komme til start og og nogle af der deles deroppe på webstedet.

Læs alt om det her og hvis du er interesseret i detaljerne bag det, Jeg er mere end glade for at snakke om det..

Her er linket officielle meddelelse: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=82 #O365

</slutningen>

Hvordan: Konfigurere enhedstest og testdækning med QUnit.js og Blanket.js For et kontor 365 SharePoint App

Intro

Jeg har været at udforske test af enheder og teste dækning for JavaScript, som jeg arbejder på en ny SharePoint app for SharePoint online i Office 365 Suite.  De åbenlyse forskning stier førte mig til Qunit.js og lige efter at, til Blanket.js.

QUnit Lad mig oprette unit-tests og gruppere dem i moduler.  Et modul er bare en simpel måde at organisere relaterede tests. (Jeg er ikke sikker på, jeg bruger det efter hensigten, men det virker for mig så langt med den lille sæt af tests jeg hidtil har defineret).

Blanket.js integrerer med Qunit og sig vil røbe sig mig de faktiske linjer af JavaScript, der var – og endnu vigtigere – var ikke faktisk udføres under kører test.  Dette er "dækning"-linjer, der udføres er omfattet af testen, mens andre ikke.

Mellem opsætning af god testcases og visning dækning, Vi kan reducere den risiko, at vores kode har skjulte defekter.  Gode tider.

Qunit

Forudsat at du har din Visual Studio projekt oprettet, starte med at hente JavaScript-pakke fra http://qunitjs.com.  Tilføje JavaScript og tilsvarende CSS til din løsning.  Mine ser sådan ud:

image

Figur 1

Som du kan se, Jeg var ved hjælp af 1.13.0 på tidspunktet skrev jeg dette blogindlæg. Glem ikke at downloade og tilføje CSS-fil.

Der ud af måde, næste skridt er at skabe en form for test sele og reference Qunit bits.  Jeg tester en masse funktioner i en scriptfil kaldet "QuizUtil.js", så jeg har oprettet en HTML-side kaldet "QuizUtil_test.html" som vist:

image Figur 2

Her er koden:

<!DOCTYPE HTML>
<HTML xmlns= "http://www.w3.org/ 1999/xhtml">
<hoved>
    <titel>QuizUtil test med Qunit</titel>
    <link rel= "stylesheet" href="../CSS/qunit-1.13.0.css" />
    <script type= text/javascript"" src="QuizUtil.js" data-cover></script>
    <script type ="text/javascript" src ="qunit-1.13.0.js"></script>
    <script type ="text/javascript" src ="blanket.min.js"></script>

    <script>
        modul("getIDFromLookup");
        test("QuizUtil getIDFromLookupField", funktion () {
            varians goodValue = "1;#Paul Galvin";

            lig(getIDFromLookupField(goodValue) + 1, 2), "ID af [" + goodValue + "] + 1 bør være 2";
            lig(getIDFromLookupField(ikke defineret), ikke defineret, "Udefineret inputargumentet skal returnere udefineret resultat.");
            lig(getIDFromLookupField(""), ikke defineret, "Tom inputargumentet skal returnere en udefineret værdi.");
            lig(getIDFromLookupField("gobbledigood3-thq;dkvn ada;skfja sdjfbvubvqrubqer0873407t534piutheqw;VN"), ikke defineret,"Skal altid returnere et resultat cabriolet til et heltal");
            lig(getIDFromLookupField("2;#en anden person"), "2", "Kontrol [2;#en anden person].");
            lig(getIDFromLookupField("9834524;#lang værdi"), "9834524", "Store værdi test.");
            notEqual(getIDFromLookupField("5;#nogen", 6), 6, "Test en notEqual (5 er ikke lig med 6 for denne prøve: [5;#nogen]");

        });

        modul("htmlEscape");
        test("QuizUtil htmlEscape()", funktion () {
            lig(htmlEscape("<"), "&lt;", "Undslippe et mindre end-operatør ('<')");
            lig(htmlEscape("<div class =  "someclass">Nogle tekst</div>"), "&lt;div class =&quot;someclass&quot;&gt;Nogle tekst&lt;/div&gt;", "Mere komplekse test streng.");
        });

        modul("getDateAsCaml");
        test("QuizUtil getDateAsCaml()", funktion () {
            lig(getDateAsCaml(nye Dato("12/31/2013")), "2013-12-31T:00:00:00", "Test hårdt kodet dato: [12/31/2013]");
            lig(getDateAsCaml(nye Dato("01/05/2014")), "2014-01-05T:00:00:00", "Test hårdt kodet dato: [01/05/2014]");
            lig(getDateAsCaml(nye Dato("01/31/2014")), "2014-01-31T:00:00:00", "Test hårdt kodet dato: [01/31/2014]");
            lig(getTodayAsCaml(), getDateAsCaml(nye Dato()), "getTodayAsCaml() skal lige getDateAsCaml(ny dato())");
            lig(getDateAsCaml("vrøvl værdi"), ikke defineret, "Prøv at få datoen for en sludder værdi.");
            lig(getDateAsCaml(ikke defineret), ikke defineret, "Prøv at få datoen for den [ikke defineret] dato.");
        });

        modul("getParameterByName");
        test("QuizUtil getParameterByName (fra forespørgselsstrengen.)", funktion () {
            lig(getParameterByName(ikke defineret), ikke defineret, "Prøv at få udefineret parameter skal returnere udefineret.");
            lig(getParameterByName("findes ikke"), ikke defineret, "Prøv at få værdi for parameteren, når vi ved, at parameteren ikke findes.");

        });

        modul("Cookies");
        test("QuizUtil forskellige cookie funktioner.", funktion () {
            lig(setCookie("test", "1", -1), getCookieValue("test"), "Få en cookie, jeg indstille bør arbejde.");
            lig(setCookie("anycookie", "1", -1), True, "Indstilling af en gyldig madlavning skal returnere 'sand'.");
            lig(setCookie("crazy Cookienavn !@#$%"%\^&*(()?/><.,", "1", -1), True, "Indstilling af en dårlig Cookienavn skal returnere 'false'.");
            lig(setCookie(ikke defineret, "1", -1), ikke defineret, "Passerer udefineret som cookie-navn.");
            lig(getCookieValue("findes ikke"), "", "Cookie ikke eksisterer test.");
        });

    </script>
</hoved>
<kroppen>
    <div id= "qunit"></div>
    <div id= "qunit-armatur"></div>

</kroppen>
</HTML>

Der er flere ting der sker her:

  1. Refererer til min kode (QuizUtil.js)
  2. Refererer til Qunity.js
  3. Definere nogle moduler (getIDFromLookup, Cookies, m.fl.)
  4. Placere en <div> Hvis ID er "qunit".

Derefter, Jeg trække bare op denne side og du får noget som dette:

image

Figur 3

Hvis du ser øverst, du har et par muligheder, hvoraf to er interessante:

  • Skjul bestået test: Temmelig indlysende.  Kan hjælpe øjet bare se problemområderne og ikke en masse rod.
  • Modul: (drop): Dette vil filtrere tests ned til netop disse grupper af tests du vil.

Hvad angår prøverne sig selv – et par kommentarer:

  • Det er en selvfølge at du skal skrive din kode, så det er testbare i første omgang.  Ved hjælp af værktøjet kan hjælpe med at håndhæve denne disciplin. For eksempel, Jeg havde en funktion kaldet "getTodayAsCaml()”.  Dette er ikke meget testbare, da det tager ingen inputargumentet og teste det for ligestilling, Vi skal konstant opdatere test-kode for at afspejle den aktuelle dato.  Jeg refactored det ved at tilføje en data input-parameteren derefter passerer den aktuelle dato, når jeg ønsker dags dato i CAML format.
  • Qunit rammer dokumenterer sine egne test og det synes temmelig robust.  Det kan gøre enkle ting som test for ligestilling og har også støtte til ajax stil opkald ("rigtige" eller hånet ved hjælp af din foretrukne mocker).
  • Gå gennem processen også tvinger dig til at tænke gennem kanten tilfælde – hvad sker der med "Udefineret" eller null er gået ind i en funktion.  Det gør det døde nemt at teste disse scenarier ud.  Gode ting.

Dækning med Blanket.js

Blanket.js supplerer Qunit ved at spore de faktiske linjer kode, der udføres i løbet af kører din test.  Det integrerer ret i Qunit så selv om det er en helt separat app, det spiller pænt-det ser virkelig ud som om det er en problemfri app.

Dette er blanket.js i aktion:

image Figur 4

image

Figur 5

(Du faktisk nødt til at klikke på afkrydsningsfeltet "Aktiver dækning" øverst [Se figur 3] at muliggøre dette.)

De fremhævede linjer i figur 5 ikke er blevet henrettet af nogen af mine tests, så jeg nødt til at udtænke en test, der forårsager dem til at udføre hvis jeg ønsker fuld dækning.

Få blanket.js arbejde ved at følge disse trin:

  1. Downloade det fra http://blanketjs.org/.
  2. Føje det til dit projekt
  3. Opdatere din testside sele (QuizUtil_test.html i mit tilfælde) som følger:
    1. Reference koden
    2. Dekorere din <script> reference som denne:
    <script type= text/javascript"" src="QuizUtil.js" data-cover></script>

Blanket.js opfanger attributten "data-cover" og gør sin magi.  Det kroge til Qunit, opdaterer UI for at tilføje indstillingen "Aktiver dækning" og voila!

Resumé (TL; DR)

Brug Qunit til at skrive din prøvesager.

  • Download det
  • Føje det til dit projekt
  • Skrive en test sele side
  • Oprette din analyser
    • Refactor nogle af jeres kode hen til blive testbare
    • Være kreativ!  Tænk på crazy, umuligt scenarier og teste dem alligevel.

Brug blanket.js til at sikre dækning

  • Kontroller, at Qunit fungerer
  • Download blanket.js og føje den til dit projekt
  • Føje det til din testside sele:
    • Tilføjelse af en henvisning til blanket.js
    • Tilføje en "data-cover" attribut til din <script> Tag
  • Køre din Qunit test.

Jeg har aldrig gjorde noget af dette før og havde nogle rudimentære ting arbejder i en håndfuld timer. 

Happy test!

</slutningen>

undefinedAbonner på min blog.

Følg mig på kvidre på http://www.twitter.com/pagalvin

BPOS 2010 og "Oversæt”

Jeg læste en af disse temmelig generisk blah-lignende artikler på BPOS (Microsofts exchange og SharePoint i skyen) og heldigvis waded gennem til slutningen:

Med hensyn til andre kortsigtede resultater, Microsoft er forpligte sig til at levere i BPOS v.Next indfødte PowerShell scripting via en PowerShell slutpunkt bygge på PowerShell Version 2. Godkendelse sker via Online-id'er, med en enkelt legitimationsoplysninger at kunne bruges til både PowerShell og portalen.Keane lød beskeden andre Microsoft execs har udtryk på TechEd denne uge: Cloud kapaciteter, over tid, vil  blive et supersæt af hvad er tilgængelige lokalt. I øjeblikket, omvendt er tilfældet, og Microsofts Online services tilbyder et undersæt af funktioner i software-ækvivalenter af hvert produkt.

Forestillingen om, at skyen vil give større kapacitet end på stedet er nyt for mig. Jeg spekulerer på, hvor sandt det vil være i sidste ende.  Det føles ulogisk for mig.  Jeg får helt den idé, at en masse virksomheder vil flytte ting til skyen (eller starte i skyen) men jeg normalt mener, at de gør det fordi pro (lettere admin, SLA, osv) langt opveje ulemper (reduceret funktionalitet). 

Jeg har en lille smule af en svært ved at tro at cloud tilbud vil overstige på prem kapaciteter.  Flere arkitekturer er hårde og virker som det skal tvinge kompromiser for at give god SLA og brugervenlighed...

Jeg vil sandsynligvis spise mine ord på dette.  Jeg husker at tænke, at ingen kunne eventuelt har brug mere end 650 MB data og derfor, CD'EN aldrig kommer til at blive endnu bedre.

</slutningen>

Abonner på min blog.

Følg mig på kvidre på http://www.twitter.com/pagalvin

SharePoint Online og InfoPath

Jeg kan være den sidste person til at indse dette, men SharePoint Online (som jeg ofte hører folk sige er en glorificeret WSS) understøtter InfoPath Forms Services.  Det er temmelig kraftig ting, især i betragtning af at IP FS er en Mos virksomhedsfunktionen og BPOS er noget som $1.99/ måned for 10,000 brugere.  Måske er det lidt mere end det.

Så, SharePoint Online trodser nem definition.  Det har denne virksomhedsfunktionen, men ingen anonym adgang (hvilke selv WSS understøtter).  Du kan gøre nogle interessante ting med søgning (MOSS-ish, da du kan definere site niveau scopes), men hvis du har brug for adgang til skibets sikringsplan, Du kan ikke gøre det.  Du kan spille den ”på den ene side og på den anden” spil hele natten lang med dette produkt 🙂

Microsoft forventes at frigive en ny version af SP Online i de næste par måneder.  Jeg spekulerer på, hvad mærkeligt hybrid, det vil være?

</slutningen>

Abonner på min blog.

Følg mig på kvidre på http://www.twitter.com/pagalvin