Categorie Archieven: SharePoint Online

Wicked spannende aankondiging

Maken van aankondigingen is niet echt mijn ding, maar dit keer, Ik ben echt en echt enthousiast over de enkel-gelanceerd Slalom Big Apple SharePoint-site. 

Ik werk bij Slalom consulting en beheren van de portalen & Samenwerking in de praktijk.  De Big Apple site is "mijn" site voor mijn praktijk hier in New York.  Ik heb lang gezocht een van deze. Ik ben zeker dat veel SP pro's gewild voor iets dergelijks.  Hoeveel keer hebben we ons eigen bedrijf publieke site bekeken, of een van klanten en ze gezien bouwen uit en gewoon weten en willen dat ze het op SP voortbouwen zouden?  We weten allemaal dat SP vrij goed in dit soort dingen is, maar het is niet zeer gebruikelijk. 

Goed, de werelden ten slotte uitgelijnd precies goed voor mij-SP Online is echt goedkoop, Ik had de juiste team en genoeg tijd om daadwerkelijk doen.

Het was een geweldige reis te krijgen om te lanceren en en sommige van die is gedeeld daarboven op de site.

Lees er alles over hier en als je geïnteresseerd zijn in de details achter het, Ik ben meer dan blij om erover te praten.

Hier is de officiële aankondiging link: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=82 #O365

</einde>

Procedures: Unit Test en Test dekking met QUnit.js en Blanket.js voor een Office configureren 365 SharePoint App

Intro

Ik heb het verkennen van eenheid die test en test dekking voor JavaScript als ik werk op een nieuwe SharePoint-app voor SharePoint online in het kantoor 365 Suite.  De paden voor de hand liggende onderzoek leidde me om te Qunit.js en direct na dat, Aan Blanket.js.

QUnit laat me eenheid tests instellen en groeperen in modules.  Een module is gewoon een eenvoudige manier om te organiseren gerelateerde tests. (Ik ben niet zeker dat ik gebruik het als bedoeld, maar het werkt voor mij tot nu toe met de kleine set van tests die ik tot nu toe hebt gedefinieerd).

Blanket.js integreert met Qunit en het zal mij de feitelijke lijnen van JavaScript die waren- en nog belangrijker-werden niet daadwerkelijk uitgevoerd tijdens het uitvoeren van de tests.  Dit is "dekking"-lijnen die uitgevoerd worden gedekt door de test, terwijl anderen niet zijn.

Tussen goede testcases instellen en weergeven van de dekking, We kunnen het risico dat onze code heeft verborgen gebreken.  Goede tijden.

Qunit

Veronderstellend hebt u uw Visual Studio project instellen, Begin door te downloaden van het pakket JavaScript uit http://qunitjs.com.  De JavaScript en bijbehorende CSS toevoegen aan uw oplossing.  Mine ziet er als volgt:

image

Figuur 1

Zoals u kunt zien, Ik was met behulp van 1.13.0 op het moment schreef ik deze blogpost. Vergeet niet om te downloaden en het CSS-bestand toevoegen.

Dat uit de weg, volgende stap is het maken van een soort van testuitrusting en verwijst naar de Qunit bits.  Ik ben het testen van een heleboel functies in een scriptbestand genaamd "QuizUtil.js" dus ik heb een HTML-pagina met de naam "QuizUtil_test.html gemaakt" zoals:

image Figuur 2

Hier is de code:

<!DOCTYPE HTML>
<HTML xmlns= 'http://www.w3.org/ 1999/xhtml">
<hoofd>
    <titel>QuizUtil test met Qunit</titel>
    <koppeling rel= "stylesheet" href="../CSS/qunit-1.13.0.CSS" />
    <script type= text/javascript"" src="QuizUtil.js" gegevens-cover></script>
    <script type ="text/javascript" src ="qunit-1.13.0.js"></script>
    <script type ="text/javascript" src ="blanket.min.js"></script>

    <script>
        module("getIDFromLookup");
        test("QuizUtil getIDFromLookupField", functie () {
            var goodValue = "1;#Paul Galvin";

            gelijke(getIDFromLookupField(goodValue) + 1, 2), "ID van [" + goodValue + "] + 1 2 moeten worden";
            gelijke(getIDFromLookupField(undefined), undefined, "Niet-gedefinieerde invoer argument moet ongedefinieerde resultaat te retourneren.");
            gelijke(getIDFromLookupField(""), undefined, "Lege invoer argument moet een niet-gedefinieerde waarde retourneren.");
            gelijke(getIDFromLookupField("gobbledigood3-thq;dkvn ada;skfja sdjfbvubvqrubqer0873407t534piutheqw;VN"), undefined,"Moeten altijd terug een resultaat Cabrio naar een geheel getal");
            gelijke(getIDFromLookupField("2;#enige andere persoon"), "2", "Checking [2;#enige andere persoon].");
            gelijke(getIDFromLookupField("9834524;#Long-waarde"), "9834524", "Grote waarde test.");
            notEqual(getIDFromLookupField("5;#iedereen", 6), 6, "Het testen van een notEqual (5 is niet gelijk aan 6 voor dit voorbeeld: [5;#iedereen]");

        });

        module("htmlEscape");
        test("QuizUtil htmlEscape()", functie () {
            gelijke(htmlEscape("<"), "&lt;", "Ontsnappen een minder dan, operator ('<')");
            gelijke(htmlEscape("<div class =  "someclass">Sommige tekst</div>"), "&lt;div class =&quot;someclass&quot;&gt;Sommige tekst&lt;/div&gt;", "Meer complexe test string.");
        });

        module("getDateAsCaml");
        test("QuizUtil getDateAsCaml()", functie () {
            gelijke(getDateAsCaml(Nieuw Datum("12/31/2013")), "2013-12-31T:00:00:00", "Testing hard gecodeerde datum: [12/31/2013]");
            gelijke(getDateAsCaml(Nieuw Datum("01/05/2014")), "2014-01-05T:00:00:00", "Testing hard gecodeerde datum: [01/05/2014]");
            gelijke(getDateAsCaml(Nieuw Datum("01/31/2014")), "2014-01-31T:00:00:00", "Testing hard gecodeerde datum: [01/31/2014]");
            gelijke(getTodayAsCaml(), getDateAsCaml(Nieuw Datum()), "getTodayAsCaml() moet gelijk zijn aan getDateAsCaml(nieuwe datum())");
            gelijke(getDateAsCaml("onzin waarde"), undefined, "Proberen om de datum van de waarde van een onzin.");
            gelijke(getDateAsCaml(undefined), undefined, "Probeer om de datum van de [undefined] datum.");
        });

        module("getParameterByName");
        test("QuizUtil getParameterByName (uit de querytekenreeks)", functie () {
            gelijke(getParameterByName(undefined), undefined, "Proberen om te krijgen niet-gedefinieerde parameter ongedefinieerde moet retourneren.");
            gelijke(getParameterByName("does not exist"), undefined, "Proberen om de waarde van de parameter wanneer we weten dat de parameter niet bestaat.");

        });

        module("Cookies");
        test("QuizUtil verschillende cookie functies.", functie () {
            gelijke(setCookie("test", "1", -1), getCookieValue("test"), "Get een cookie ik ingesteld zou moeten werken.");
            gelijke(setCookie("anycookie", "1", -1), True, "Instellen van een geldig koken moet retourneren 'true'.");
            gelijke(setCookie("gekke cookienaam !@#$%"%\^&*(()?/><.,", "1", -1), True, "Instellen van een slechte cookienaam moet retourneren 'valse'.");
            gelijke(setCookie(undefined, "1", -1), undefined, "Passing ongedefinieerde als de cookienaam.");
            gelijke(getCookieValue("does not exist"), "", "Cookie does not exist test.");
        });

    </script>
</hoofd>
<lichaam>
    <div id"qunit ="></div>
    <div id= "qunit-armatuur"></div>

</lichaam>
</HTML>

Er zijn verschillende dingen gebeuren hier:

  1. Verwijzen naar mijn code (QuizUtil.js)
  2. Verwijzen naar Qunity.js
  3. Sommige modules definiëren (getIDFromLookup, Cookies, en anderen)
  4. Plaatsen van een <div> waarvan de ID is "qunit".

Vervolgens, Ik trek alleen deze pagina en krijg je zoiets als dit:

image

Figuur 3

Als je aan de bovenkant kijkt, u hebt een paar opties, waarvan er twee zijn interessant:

  • Verbergen voorbij tests: Vrij duidelijk.  Kan helpen uw oog gewoon zien de probleemgebieden en niet een heleboel rommel.
  • Module: (drop-down): Dit zal de tests tot alleen die groepen van tests die u wilt filteren.

Wat betreft de tests zelf-een paar opmerkingen:

  • Het spreekt vanzelf dat you need to Schrijf uw code zodanig zijn dat het in de eerste plaats testbare is.  Met behulp van het hulpprogramma kunt afdwingen die discipline. Bijvoorbeeld, Ik had een functie genaamd "getTodayAsCaml()”.  Dit is niet zeer testbare aangezien het geen invoer argument neemt en testen voor gelijkheid, We zouden moeten voortdurend actualiseren van de test-code om te reflecteren op de huidige datum.  Ik refactored het door een invoerparameter gegevens toevoegen dan langs de huidige datum wanneer ik wil de datum van vandaag in CAML formaat.
  • Het Qunit kader documenten zijn eigen proeven en het lijkt vrij robuust.  Het kan doen eenvoudige dingen zoals testen voor gelijkheid en heeft ook ondersteuning voor ajax stijl oproepen (zowel de "echte" of de mocked met behulp van uw favoriete mocker).
  • Gaan door het proces ook dwingt je om na te denken door middel van randgevallen – wat er gebeurt met "undefined" of null wordt doorgegeven aan een functie.  Het maakt het doodsimpel om te testen deze scenario's uit.  Goed spul.

Dekking met Blanket.js

Blanket.js is een aanvulling op Qunit door het bijhouden van de werkelijke lijnen van code die in de loop van het runnen van uw tests worden uitgevoerd.  Het integreert dus zelfs al is het een hele aparte app recht in Qunit, het speelt mooi-het echt lijkt alsof het is een naadloze app.

Dit is blanket.js in actie:

image Figuur 4

image

Figuur 5

(Je eigenlijk hebben om te klikken op het selectievakje "Enable dekking" aan de bovenkant [Zie figuur 3] om dit mogelijk te maken.)

De gemarkeerde regels in figuur 5 niet zijn uitgevoerd door een van mijn tests, dus ik moet ontwikkelen een test die leidt hen om uit te voeren tot als ik wil volledige dekking.

Krijgen blanket.js werken door deze stappen te volgen:

  1. Het downloaden van http://blanketjs.org/.
  2. Toe te voegen aan uw project
  3. Bijwerken van uw testpagina harnas (QuizUtil_test.html in mijn geval) als volgt:
    1. Verwijst naar de code
    2. Versier uw <script> verwijst naar uitzien:
    <script type= text/javascript"" src="QuizUtil.js" gegevens-cover></script>

Blanket.js pikt het kenmerk "gegevens-cover" en doet zijn magie.  Het haken in Qunit, bijgewerkt de UI als u wilt toevoegen de optie "Enable dekking" en voila!

Samenvatting (TL; DR)

Gebruik Qunit om te schrijven uw testcases.

  • Downloaden
  • Toe te voegen aan uw project
  • Schrijf een testpagina harnas
  • Maak uw tests
    • Sommige van uw code testbare refactoring
    • Wees creatief!  Denk aan gek, onmogelijk scenario's en test hen toch.

Gebruik blanket.js om dekking

  • Zorg ervoor dat Qunit werkt
  • Blanket.js downloaden en toevoegen aan uw project
  • Toe te voegen aan uw harnas testpagina:
    • Voeg een verwijzing toe naar blanket.js
    • Voeg een "gegevens-cover" kenmerk toe aan uw <script> Label
  • Uw Qunit tests uitvoeren.

Ik nooit heb een van deze vóór en had sommige rudimentaire dingen werken in een handvol uur. 

Gelukkig testen!

</einde>

undefinedAbonneren op mijn blog.

Volg mij op Twitter op http://www.twitter.com/pagalvin

BPOS 2010 en "Superset”

Ik was het lezen van een van deze vrij generieke bla-achtige artikelen op BPOS (Van Microsoft exchange en SharePoint in de cloud) en gelukkig waded door tot het einde:

In termen van andere op korte termijn af te leveren producten, Microsoft is begaan te verstrekken in BPOS v.Next inheemse PowerShell scripts via een eindpunt PowerShell voort te bouwen op PowerShell versie 2. Verificatie zal worden gedaan door Online-id 's, met een enkele referentie kunnend worden gebruikt voor zowel PowerShell en het portaal.Keane echode het bericht andere Microsoft execs hebben uiten op TechEd deze week: Wolk mogelijkheden, na verloop van tijd, zal  Dit is een superset van wat on-premise beschikbaar is worden. Op dit moment, het omgekeerde is waar, en Microsoft Online services bieden een subset van de functies die beschikbaar zijn in de software-equivalenten van elk product.

Het idee dat de cloud voor meer vermogen dan on-premise zorgt is nieuw voor mij. Ik vraag me af hoe waar dat gaat worden in het einde.  Het voelt contra-intuïtief voor mij.  Ik volledig het idee dat veel bedrijven spul naar de wolk verhuizen zal (of beginnen in de cloud) maar ik denk het normaal dat ze doen het omdat de pro's (gemakkelijker admin, Sla 's, etc) ruimschoots opwegen tegen de nadelen (verminderde functionaliteit). 

Ik heb een beetje een harde tijd geloven dat wolk aanbod op-prem mogelijkheden zullen overschrijden.  Multi-tenant is moeilijk en het lijkt erop dat het compromissen dwingen moet om te zorgen voor goede SLA en gebruiksgemak...

Ik zal waarschijnlijk het eten van mijn woorden op dit.  Ik herinner me denken dat niemand eventueel nodig zou kunnen hebben meer dan 650 MB aan gegevens en daarom, de CD ging nooit te worden verbeterd.

</einde>

Abonneren op mijn blog.

Volg mij op Twitter op http://www.twitter.com/pagalvin

SharePoint Online en InfoPath

Ik kan de laatste persoon te beseffen dit worden, maar SharePoint Online (dat hoor ik vaak mensen zeggen is een veredelde WSS) ondersteunt InfoPath Forms Services.  Dat is vrij krachtig spul, vooral gezien het feit dat IP-FS een functie MOSS Enterprise is en BPOS is iets als $1.99/ month voor 10,000 gebruikers.  Misschien is het een beetje meer dan dat..

Dus, SharePoint Online tart gemakkelijk om definitie.  Het heeft deze onderneming functie, maar geen anonieme toegang (welke zelfs WSS ondersteunt).  Kan je enkele interessante dingen met search (MOSS-ish, Aangezien u kunt site niveau bereiken definiëren), maar als u toegang wilt tot de SSP, You can't do it.  You can play the “on the one hand and on the other” game all night long with this product 🙂

Microsoft is wijten aan een nieuwe versie van SP Online in de komende paar maanden.  Ik vraag me af wat het gaat worden raar hybride?

</einde>

Abonneren op mijn blog.

Volg mij op Twitter op http://www.twitter.com/pagalvin