Category Archives: SharePoint Online

Ímpios anúncio emocionante

Fazendo anúncios não é o meu forte, Mas desta vez, Eu estou realmente animado sobre o recém-lançado Slalom Big Apple SharePoint site. 

Eu trabalho no Slalom consultoria e gerenciar os portais & Prática de colaboração.  O site da Big Apple é "meu" site para o meu treino aqui em Nova York.  Há muito tempo queria um desses. Tenho certeza que muitos SP pro desejaram por algo semelhante.  Quantas vezes nós já olhou no site público da nossa própria companhia, ou um dos clientes e os vi a construí-lo para fora e só saber e desejando que construiriam em SP?  Todos sabemos que SP é muito bom para este tipo de coisa, Mas não é muito comum. 

Bem, os mundos finalmente alinhados, perfeito para mim – SP Online é muito barato, Eu tinha o time certo e tempo suficiente para fazê-lo.

Foi uma incrível jornada para chegar para o lançamento e algumas das que é compartilhado lá no site.

Leia tudo sobre isso aqui e se você está interessado nos detalhes por trás disso, Estou mais que feliz em falar sobre isso.

Aqui está o link do anúncio oficial: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=82 #O365

</fim>

Como: Configurar o teste unitário e cobertura de teste com QUnit.js e Blanket.js para um escritório 365 App do SharePoint

Intro

Eu estive explorando testes de unidade e teste de cobertura para JavaScript como eu trabalho em um novo aplicativo do SharePoint para SharePoint online no escritório 365 Suite.  Os caminhos de pesquisa óbvio levaram-me a Qunit.js e logo depois que, Para Blanket.js.

QUnit deixe-me criar testes de unidade e agrupá-los em módulos.  Um módulo é apenas uma maneira simples de organizar testes relacionados. (Não tenho certeza se que vou usá-lo como pretendido, Mas funcionou para mim até agora com o pequeno conjunto de testes que definiu até agora).

Blanket.js integra com Qunit e ele vai me mostrar as linhas reais de JavaScript que foram – e mais importante – não foram realmente executadas no decurso da execução dos testes.  Esta é a "cobertura" – linhas que executado são cobertas pelo teste, enquanto outros não são.

Entre a criação de casos de teste boas e visualização de cobertura, Podemos reduzir o risco de que nosso código escondido defeitos.  Bons tempos.

Qunit

Supondo que você tenha seu Visual Studio projeto configurado, Comece baixando o pacote de instalação JavaScript http://qunitjs.com.  Adicione o JavaScript e CSS correspondente à sua solução.  Mina parece com isso:

image

Figura 1

Como você pode ver, Eu estava usando 1.13.0 na época, eu escrevi este post de blog. Não se esqueça de baixar e adicionar o arquivo CSS.

Que saia do caminho, próximo passo é criar algum tipo de equipamento de teste e referenciar os bits Qunit.  Estou testando um monte de funções em um arquivo de script chamado "QuizUtil.js", então eu criei uma página HTML chamada "QuizUtil_test.html", como mostrado:

image Figura 2

Aqui está o código:

<!DOCTYPE HTML>
<HTML xmlns= "http://www.w3.org/TR/1998/REC-xml-19980210 1999/xhtml">
<cabeça>
    <título>Teste de QuizUtil com Qunit</título>
    <link rel= "stylesheet" href="../CSS/qunit-1.13.0.css" />
    <script tipo= text/javascript"" src="QuizUtil.js" dados-capa></script>
    <script type ="text/javascript" src ="qunit-1.13.0.js"></script>
    <script type ="text/javascript" src ="blanket.min.js"></script>

    <script>
        módulo("getIDFromLookup");
        teste("QuizUtil getIDFromLookupField", função () {
            var goodValue = "1;#Paul Galvin";

            igual(getIDFromLookupField(goodValue) + 1, 2), "ID do [" + goodValue + "] + 1 deve ser 2";
            igual(getIDFromLookupField(indefinido), indefinido, "O argumento de entrada indefinido deve retornar o resultado indefinido.");
            igual(getIDFromLookupField(""), indefinido, "O argumento de entrada vazio deve retornar um valor indefinido.");
            igual(getIDFromLookupField("gobbledigood3-thq;ada dkvn;skfja sdjfbvubvqrubqer0873407t534piutheqw;vn"), indefinido,"Deve sempre retornar um conversível de resultado para um número inteiro");
            igual(getIDFromLookupField("2;#outra pessoa"), "2", "Verificação [2;#outra pessoa].");
            igual(getIDFromLookupField("9834524;#valor longo"), "9834524", "Teste de grande valor.");
            notEqual(getIDFromLookupField("5;#qualquer um", 6), 6, "Testar um notEqual (5 Não é igual a 6 para esta amostra: [5;#qualquer um]");

        });

        módulo("htmlEscape");
        teste("QuizUtil htmlEscape()", função () {
            igual(htmlEscape("<"), "&lt;", "Escapando um menos que o operador ('<')");
            igual(htmlEscape("<classe div =  "someclass">Algum texto</div>"), "&lt;classe div =&quot;SomeClass&quot;&gt;Algum texto&lt;/div&gt;", "Sequência de teste mais complexa.");
        });

        módulo("getDateAsCaml");
        teste("QuizUtil getDateAsCaml()", função () {
            igual(getDateAsCaml(Novo Data("31/12/2013")), "2013-12-31T:00:00:00", "Teste codificada data: [12/31/2013]");
            igual(getDateAsCaml(Novo Data("01/05/2014")), "2014-01-05T:00:00:00", "Teste codificada data: [01/05/2014]");
            igual(getDateAsCaml(Novo Data("01/31/2014")), "2014-01-31T:00:00:00", "Teste codificada data: [01/31/2014]");
            igual(getTodayAsCaml(), getDateAsCaml(Novo Data()), "getTodayAsCaml() deve ser igual getDateAsCaml(nova data())");
            igual(getDateAsCaml("valor absurdo"), indefinido, "Tente obter a data de um valor absurdo.");
            igual(getDateAsCaml(indefinido), indefinido, "Tente obter a data da [indefinido] Data.");
        });

        módulo("getParameterByName");
        teste("QuizUtil getParameterByName (da cadeia de caracteres de consulta)", função () {
            igual(getParameterByName(indefinido), indefinido, "Tentar obter parâmetro indefinido deve retornar indefinido.");
            igual(getParameterByName("não existe"), indefinido, "Tentar obter o valor do parâmetro, quando sabemos que o parâmetro não existe.");

        });

        módulo("Cookies");
        teste("QuizUtil várias funções do cookie.", função () {
            igual(setCookie("teste", "1", -1), getCookieValue("teste"), "Obter um cookie eu definir deve funcionar.");
            igual(setCookie("anycookie", "1", -1), verdadeiro, "Definir uma cozedura válido deve retornar 'verdadeiro'.");
            igual(setCookie("nome do cookie louco !@#$%"%\^&*(()?/><.,", "1", -1), verdadeiro, "Definir um nome de cookie ruim deve retornar 'falso'.");
            igual(setCookie(indefinido, "1", -1), indefinido, "Passando indefinido como o nome do cookie.");
            igual(getCookieValue("não existe"), "", "Cookie não existe teste.");
        });

    </script>
</cabeça>
<corpo>
    <div ID= "qunit"></div>
    <div ID= "qunit-dispositivo elétrico"></div>

</corpo>
</HTML>

Existem várias coisas a acontecer aqui:

  1. Referenciando o meu código (QuizUtil.js)
  2. Referência Qunity.js
  3. Definição de alguns módulos (getIDFromLookup, Cookies, e outros)
  4. Colocando um <div> cuja ID é "qunit".

Em seguida, Só parar nesta página e você obter algo como isto:

image

Figura 3

Se você olhar no topo, Você tem algumas opções, dois dos quais são interessantes:

  • Ocultar passada testes: Bem óbvio.  Pode ajudar o seu olho vê apenas as áreas de problema e não um monte de desordem.
  • Módulo: (Deixe cair para baixo): Isso filtrará os testes até apenas os grupos de testes que você quer.

Quanto os testes se-alguns comentários:

  • Escusado será dizer que você precisa para escrever seu código de tal forma que é testável em primeiro lugar.  Usando a ferramenta pode ajudar a impor essa disciplina. Por exemplo, Eu tinha uma função chamada "getTodayAsCaml()”.  Isso não é muito testável, uma vez que não leva nenhum argumento de entrada e para testá-lo para a igualdade, precisamos atualizar constantemente o código de teste para refletir a data atual.  Eu refatorado isso adicionando um parâmetro de entrada de dados, em seguida, passando a data atual, quando eu quero a data atual no formato do CAML.
  • O quadro de Qunit documentos seus próprios testes e parece bastante robusto.  Ele pode fazer coisas simples, como teste de igualdade e também tem suporte para chamadas de estilo ajax ("real" ou fictícios usando seu favorito mocker).
  • Passando pelo processo também força você a pensar em casos extremos – o que acontece com o "indefinido" ou null é passado para uma função.  Torna absolutamente simples testar esses cenários para fora.  Coisas boas.

Cobertura com Blanket.js

Blanket.js complementa Qunit seguindo as linhas reais de código que executar durante o curso da executando os testes.  Então mesmo que é um aplicativo totalmente separado integra direito em Qunit, Ele joga muito bem – parece que é um app sem emenda.

Isto é blanket.js em ação:

image Figura 4

image

Figura 5

(Você realmente tem que clicar sobre a opção "Ativar a cobertura" no topo [Ver figura 3] para permitir isto.)

As linhas realçadas em figura 5 Não foram executados por qualquer um dos meus testes, Então eu preciso elaborar um teste que faz com que eles executar se quero cobertura completa.

Se blanket.js a trabalhar, seguindo estes passos:

  1. Baixá-lo http://blanketjs.org/.
  2. Adicioná-lo ao seu projeto
  3. Atualize sua página de equipamento de teste (QuizUtil_test.html no meu caso) como segue:
    1. O código de referência
    2. Decore seu <script> referência como este:
    <script tipo= text/javascript"" src="QuizUtil.js" dados-capa></script>

Blanket.js pega o atributo "dados-capa" e faz sua mágica.  Ganchos em Qunit, atualiza a interface do usuário para adicionar a opção "Ativar cobertura" e voila!

Resumo (TL; DR)

Use Qunit para escrever seus casos de teste.

  • Faça o download
  • Adicioná-lo ao seu projeto
  • Escrever uma página de teste arnês
  • Criar seus testes
    • Alguns dos seu código seja testável refatorar
    • Ser criativo!  Acho que de loucura, impossíveis cenários e testá-los de qualquer maneira.

Use blanket.js para garantir a cobertura

  • Certifique-se de que qunit está funcionando
  • Baixar blanket.js e adicioná-lo ao seu projeto
  • Adicioná-lo à sua página de equipamento de teste:
    • Adicionar uma referência a blanket.js
    • Adicionar um atributo "dados-capa" para seus <script> Tag
  • Executar testes Qunit.

Eu nunca fiz isso antes e tinha umas coisas rudimentares, trabalhando em um punhado de horas. 

Teste feliz!

</fim>

undefinedSubscreva ao meu blog.

Siga-me no Twitter em http://www.twitter.com/pagalvin

BPOS 2010 e "superconjunto”

Eu estava lendo um dos Estes artigos de blá-como muito genéricos em BPOS (Do Microsoft exchange e o SharePoint na nuvem) e felizmente entrei através de até o fim:

Em termos de outros resultados de curto prazo, A Microsoft está comprometendo a fornecer no BPOS v. Next nativo scripts PowerShell através de uma compilação de ponto de extremidade do PowerShell no PowerShell versão 2. Autenticação será feita através de IDs Online, com uma única credencial ser capaz de ser usado para o PowerShell e o portal.Keane ecoou a mensagem outro Microsoft executivos têm sido dublando no TechEd esta semana: Capacidades de nuvem, ao longo do tempo, será  tornar-se um superconjunto do que está disponível no local. Atualmente, o inverso é verdadeiro, e Serviços Online da Microsoft oferecem um subconjunto das funções disponíveis nos equivalentes de software de cada produto.

A noção de que a nuvem irá fornecer mais capacidade do que o local é nova para mim. Gostaria de saber como verdade que vai ser no final.  Parece contra-intuitivo para mim.  Eu entendo a idéia de que muitas empresas vão passar coisas para a nuvem (ou começar na nuvem) Mas normalmente acho que fazem isso porque o pro (admin mais fácil, SLAs, etc) superam os contras (funcionalidade reduzida). 

Estou tendo um pouco de dificuldade em acreditar que as ofertas de nuvem excederá em prem recursos.  Múltiplos inquilinos é difícil e parece que ele deve forçar compromissos a fim de proporcionar boa SLA e facilidade de uso...

Eu provavelmente vou comer minhas palavras sobre este.  Lembro de pensar que ninguém poderia possivelmente necessidade mais de 650 MB de dados e, portanto,, o CD foi nunca vai ser melhorado.

</fim>

Subscreva ao meu blog.

Siga-me no Twitter em http://www.twitter.com/pagalvin

SharePoint Online e o InfoPath

Posso ser a última pessoa a perceber isso, Mas o SharePoint Online (ouço muitas vezes as pessoas dizem o que é um glorificado WSS) suporta os serviços de formulários do InfoPath.  Isso é uma coisa muito poderosa., especialmente considerando que IP FS é uma característica MOSS Enterprise e BPOS é algo como US $ 1,99/mês para 10,000 usuários.  Talvez seja um pouco mais do que isso.

Assim, SharePoint Online desafia a definição fácil.  Tem esse recurso de empresa, Mas nenhum acesso anônimo (Qual mesmo WSS suporta).  Você pode fazer coisas interessantes com pesquisa (Está, desde que você pode definir escopos de nível de site), Mas se você precisar acessar o SSP, Você não pode fazê-lo.  You can play the “on the one hand and on the other” game all night long with this product 🙂

Microsoft vai lançar uma nova versão do SP Online nos próximos meses.  Gostaria de saber o que estranho híbrido vai ser?

</fim>

Subscreva ao meu blog.

Siga-me no Twitter em http://www.twitter.com/pagalvin