archivi categoria: SharePoint on-line

Malvagio annuncio emozionante

Fare annunci non è davvero la mia cosa, ma questa volta, Sono davvero entusiasta di Slalom Big Apple SharePoint sito appena lanciato. 

Io lavoro presso Slalom consulting e gestire i portali & Pratica di collaborazione.  Il sito della grande mela è "mio" sito per la mia pratica qui a New York.  Ho a lungo desiderato uno di questi. Sono sicuro che molti SP pro hanno voluto per qualcosa di simile.  Quante volte abbiamo guardato al sito pubblico della nostra società, o uno dei clienti e li ha visti costruirlo fuori e solo conoscendo e che desiderano che avrebbe costruito su SP?  Sappiamo tutti che SP è abbastanza bravo a questo genere di cose, ma non è molto comune. 

Pozzo, i mondi finalmente allineati giusto per me – SP Online è davvero poco costoso, Ho avuto la squadra giusta e abbastanza tempo per farlo effettivamente.

E ' stato un viaggio incredibile per arrivare a lanciare e alcuni di che è condiviso lassù sul sito.

Leggi tutto su di esso qui e se siete interessati ai dettagli dietro di esso, Io sono più che felice di parlarne.

Ecco il link dell'annuncio ufficiale: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=82 #O365

</fine>

Come si fa: Configurare Unit Test e Test Coverage con QUnit.js e Blanket.js per un ufficio 365 SharePoint App

Intro

Hai esplorato unit test e test copertura per JavaScript come io lavoro su una nuova applicazione di SharePoint per SharePoint online in ufficio 365 Suite.  I percorsi di ricerca ovvio mi ha portato a Qunit.js e subito dopo che, A Blanket.js.

QUnit mi permetta di creare unit test e raggrupparli in moduli.  Un modulo è solo un semplice modo per organizzare i test correlati. (Non sono sicuro che sto usandolo come previsto, ma si sta lavorando per me finora con il piccolo insieme di test che finora ho definito).

Blanket.js integra con Qunit e mi mostrerà le linee effettive di JavaScript che sono stati – e ancora più importante – non sono stati effettivamente eseguite nel corso di esecuzione dei test.  Questa è la "copertura" – linee che eseguiti sono coperti dal test, mentre altri non sono.

Tra impostazione buone test case e visualizzazione di copertura, possiamo ridurre il rischio che il nostro codice ha nascosto i difetti.  Bei tempi.

Qunit

Assumendo che abbiate il vostro Visual Studio progetto impostato, inizia scaricando il pacchetto JavaScript da http://qunitjs.com.  Aggiungere JavaScript e CSS corrispondente alla soluzione.  Miniera assomiglia a questo:

image

Figura 1

Come si può vedere, Stavo usando 1.13.0 al momento ho scritto questo post del blog. Non dimenticate di scaricare e aggiungere il file CSS..

Che fuori del modo, il passo successivo è creare una sorta di prova imbrago e i bit Qunit di riferimento.  Sto testando un sacco di funzioni in un file di script chiamato "QuizUtil.js", così ho creato una pagina HTML denominata "QuizUtil_test.html" come mostrato:

image Figura 2

Ecco il codice:

<!DOCTYPE html>
<html xmlns= "http://www.w3.org/ 1999/xhtml">
<testa>
    <titolo>QuizUtil prova con Qunit</titolo>
    <link rel= "stylesheet" href="../CSS/qunit-1.13.0.CSS" />
    <script di tipo= text/javascript"" src="QuizUtil.js" dati-copertina></script di>
    <tipo di script ="text/javascript" src ="qunit-1.13.0.js"></script di>
    <tipo di script ="text/javascript" src ="blanket.min.js"></script di>

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

            uguale(getIDFromLookupField(goodValue) + 1, 2), "ID del [" + goodValue + "] + 1 dovrebbero essere 2";
            uguale(getIDFromLookupField(non definito), non definito, "Undefined argomento di input deve restituire un risultato indefinito.");
            uguale(getIDFromLookupField(""), non definito, "Argomento di input vuoto deve restituire un valore indefinito.");
            uguale(getIDFromLookupField("gobbledigood3-thq;dkvn ada;skfja sdjfbvubvqrubqer0873407t534piutheqw;VN"), non definito,"Deve sempre restituire un convertibile del risultato in un valore Integer");
            uguale(getIDFromLookupField(2";#qualche altra persona"), 2"", "Checking [2;#qualche altra persona].");
            uguale(getIDFromLookupField("9834524;#valore Long"), "9834524", "Prova di grande valore.");
            notEqual(getIDFromLookupField("5;#chiunque", 6), 6, "Prova un notEqual (5 non è uguale a 6 per questo esempio: [5;#chiunque]");

        });

        modulo("htmlEscape");
        test("QuizUtil htmlEscape()", funzione () {
            uguale(htmlEscape("<"), "&lt;", "Fuga a meno che l'operatore ('<')");
            uguale(htmlEscape("<classe div =  "someclass">Qualche testo</div>"), "&lt;div class =&quot;SomeClass&quot;&gt;Qualche testo&lt;/div&gt;", "Stringa di test più complesso.");
        });

        modulo("getDateAsCaml");
        test("QuizUtil getDateAsCaml()", funzione () {
            uguale(getDateAsCaml(Nuovo Data("31/12/2013")), "31T-12-2013:00:00:00", "Test data duramente codificato: [12/31/2013]");
            uguale(getDateAsCaml(Nuovo Data("01/05/2014")), "05T-01-2014:00:00:00", "Test data duramente codificato: [01/05/2014]");
            uguale(getDateAsCaml(Nuovo Data("01/31/2014")), "31T-01-2014:00:00:00", "Test data duramente codificato: [01/31/2014]");
            uguale(getTodayAsCaml(), getDateAsCaml(Nuovo Data()), "getTodayAsCaml() dovrebbe essere uguale getDateAsCaml(nuova data())");
            uguale(getDateAsCaml("valore di sciocchezze"), non definito, "Cercare di ottenere la data di un valore di sciocchezze.");
            uguale(getDateAsCaml(non definito), non definito, "Cercare di ottenere la data della [non definito] Data.");
        });

        modulo("getParameterByName");
        test("QuizUtil getParameterByName (dalla stringa di query)", funzione () {
            uguale(getParameterByName(non definito), non definito, "Cercare di ottenere indefinito parametro deve restituire indefinito.");
            uguale(getParameterByName("non esiste"), non definito, "Cercare di ottenere il valore del parametro quando sappiamo che il parametro non esiste.");

        });

        modulo("Cookies");
        test("QuizUtil varie funzioni di biscotto.", funzione () {
            uguale(setCookie("prova", 1"", -1), getCookieValue("prova"), "Get un cookie ho impostato dovrebbe funzionare.");
            uguale(setCookie("anycookie", 1"", -1), true, "L'impostazione di una cucina valida deve restituire 'vero'.");
            uguale(setCookie("nome del cookie pazzo !@#$%"%\^&*(()?/><.,", 1"", -1), true, "L'impostazione di un nome di cookie male deve restituire 'falsa'.");
            uguale(setCookie(non definito, 1"", -1), non definito, "Passing indefinito come il nome del cookie.");
            uguale(getCookieValue("non esiste"), "", "Cookie non esiste prova.");
        });

    </script di>
</testa>
<corpo>
    <div Identificazione= qunit""></div>
    <div Identificazione= "qunit-apparecchio"></div>

</corpo>
</html>

Ci sono parecchie cose che succedono qui:

  1. Il mio codice di riferimento (QuizUtil.js)
  2. Riferimento Qunity.js
  3. Definizione di alcuni moduli (getIDFromLookup, Cookies, e gli altri)
  4. Posizionando un <div> cui ID è "qunit".

Poi, Basta tirare su questa pagina e si ottiene qualcosa di simile:

image

Figura 3

Se guardi nella parte superiore, avete alcune opzioni, di cui due sono interessanti:

  • Nascondi superato test: Abbastanza evidente.  Può aiutare il vostro occhio vedere solo le aree di problema e non un sacco di confusione.
  • Modulo: (cadere giù): Questo consente di filtrare i test fino a solo quei gruppi di test che si desidera.

Per quanto riguarda i test stessi – alcune osservazioni:

  • Va da sé che è necessario scrivere codice, tale che in primo luogo è testabile.  Utilizzando lo strumento può aiutare a far rispettare tale disciplina. Per esempio, Ho avuto una funzione chiamata "getTodayAsCaml()”.  Questo non è verificabile molto poiché non prende nessun argomento di input e per verificare l'uguaglianza, dobbiamo costantemente aggiornare il codice di test per riflettere la data corrente.  Si rifattorizzato aggiungendo un parametro di input dati e passando la data corrente quando voglio la data odierna nel formato CAML.
  • Quadro Qunit documenta le proprie prove e sembra piuttosto robusto.  Possono fare cose semplici come test per l'uguaglianza e ha anche il supporto per le chiamate in stile ajax ("reale" o utilizzando il tuo preferito mocker deriso).
  • Passando attraverso il processo anche ti costringe a pensare attraverso casi limite – cosa succede con "undefined" o in una funzione viene passato null.  Lo rende morto semplice testare questi scenari fuori.  Roba buona.

Copertura con Blanket.js

Blanket.js completa Qunit l'effettive righe di codice che vengono eseguite durante il corso dell'esecuzione di test di rilevamento.  Esso integra diritto in Qunit anche se che è una app completamente separati, gioca bene – sembra davvero che è una app senza soluzione di continuità.

Questo è blanket.js in azione:

image Figura 4

image

Figura 5

(In realtà devi cliccare sulla casella di controllo "Attiva la copertura" nella parte superiore [Vedi figura 3] per consentire questo.)

Le righe evidenziate in figura 5 non sono stati eseguiti da alcuna delle mie prove, quindi ho bisogno di elaborare un test che causano loro di eseguire se voglio piena copertura.

Ottenere blanket.js lavorando seguendo questi passi:

  1. Scaricalo da http://blanketjs.org/.
  2. Aggiungerlo al progetto
  3. Aggiornare la tua pagina di prova imbrago (QuizUtil_test.html nel mio caso) come segue:
    1. Il codice di riferimento
    2. Decorare il vostro <script di> riferimento come questo:
    <script di tipo= text/javascript"" src="QuizUtil.js" dati-copertina></script di>

Blanket.js preleva l'attributo "dati-copertina" e fa la sua magia.  Aggancia Qunit, Aggiorna l'interfaccia utente per aggiungere l'opzione "Abilita la copertura" e voilà!

Riassunto (TL; DR)

Utilizzare Qunit per scrivere i test case.

  • Scaricarlo
  • Aggiungerlo al progetto
  • Scrivere una pagina di prova imbrago
  • Creare i test
    • Rifattorizzare alcuni del codice sia testabile
    • Essere creativi!  Pensare di crazy, scenari impossibili e li prova comunque.

Utilizzare blanket.js per garantire una copertura

  • Assicurarsi che il Qunit sta lavorando
  • Scarica blanket.js e aggiungerlo al progetto
  • Aggiungere alla tua pagina di prova imbrago:
    • Aggiungere un riferimento a blanket.js
    • Aggiungere un attributo "dati-copertura" al vostro <script di> Tag
  • Eseguire i test Qunit.

Non ho mai fatto nulla di tutto questo prima e aveva alcune cose rudimentali in una manciata di ore di lavoro. 

Test felice!

</fine>

undefinedIscriviti al mio blog.

Seguimi su Twitter a http://www.twitter.com/pagalvin

BPOS 2010 e "Superset”

Stavo leggendo uno dei questi articoli bla-come piuttosto generici su BPOS (Di Microsoft exchange e SharePoint nel cloud) e per fortuna waded attraverso alla fine:

In termini di altri obiettivi di breve termine, Microsoft è commettere per fornire in BPOS v.Next nativo di PowerShell scripting tramite una compilazione di endpoint PowerShell versione di PowerShell 2. L'autenticazione sarà effettuata tramite ID Online, con una sola credenziale in grado di essere utilizzato sia per PowerShell e il portale.Keane ha fatto eco il messaggio altri dirigenti hanno voicing a TechEd questa settimana di Microsoft: Funzionalità cloud, nel corso del tempo, sarà  diventare un superset di ciò che è locale disponibile. Attualmente, è vero il contrario, e servizi Online di Microsoft offrono un sottoinsieme delle funzioni disponibili in equivalenti di software di ogni prodotto.

La nozione che la nube fornirà maggiori capacità di locali sono nuovo per me. Mi chiedo quanto sia vero che sta per essere alla fine.  Ci si sente controintuitivo per me.  Ho totalmente l'idea che molte aziende si muoveranno la roba nel cloud (o iniziare nel cloud) ma credo che normalmente lo fanno perché i pro (admin più facile, SLA, ecc) superano di gran lunga i contro (funzionalità ridotta). 

Sto avendo un po ' di una difficoltà a credere che offerte cloud supereranno le funzionalità su prem.  Multi-tenant è duro e sembra che devono imporre compromessi al fine di fornire buona SLA e facilità d'uso...

Io sarò probabilmente mangiare mie parole su questo.  Mi ricordo di pensare che nessuno potrebbe forse bisogno più di 650 MB di dati e quindi, il CD non avrebbe mai potuto essere migliorato.

</fine>

Iscriviti al mio blog.

Seguimi su Twitter a http://www.twitter.com/pagalvin

SharePoint on-line e InfoPath

Posso essere l'ultima persona a rendersi conto di questo, ma SharePoint on-line (che sento spesso persone dire è un glorificato WSS) supporta InfoPath Forms Services.  Che è roba abbastanza potente, soprattutto se si considera che IP FS è una caratteristica MOSS Enterprise e BPOS è qualcosa di simile a 1,99 dollari/mese per 10,000 utenti.  Forse è un po' di più.

Così, SharePoint Online sfida facile definizione.  Ha questa funzione aziendale, ma nessun accesso anonimo (sostiene che anche WSS).  Si può fare alcune cose interessanti con la ricerca (MOSS-ish, dal momento che è possibile definire gli ambiti di livello di sito), ma se è necessario accedere a servizi condivisi, non può farlo.  Puoi giocare al gioco "da una parte e dall'altra" tutta la notte con questo prodotto 🙂

Microsoft è dovuto rilasciare una nuova versione di SP Online nei prossimi mesi.  Mi chiedo cosa strano ibrido che sta andando essere?

</fine>

Iscriviti al mio blog.

Seguimi su Twitter a http://www.twitter.com/pagalvin