Com base neste tutorial que testa um aplicativo angularjs com chai, quero adicionar um teste para um valor indefinido usando o estilo "deveria". Isso falha:
it ('cannot play outside the board', function() {
scope.play(10).should.be.undefined;
});
com o erro "TypeError: Cannot read property 'should' of undefined", mas o teste passa com o estilo "expect":
it ('cannot play outside the board', function() {
chai.expect(scope.play(10)).to.be.undefined;
});
Como posso fazê-lo funcionar com "deveria"?
javascript
angularjs
testing
chai
thebenedict
fonte
fonte
assert.isUndefined(scope.play(10))
Respostas:
Esta é uma das desvantagens da sintaxe deve. Funciona adicionando a propriedade deve a todos os objetos, mas se um valor de retorno ou valor de variável for indefinido, não há um objeto para manter a propriedade.
A documentação fornece algumas soluções alternativas, por exemplo:
fonte
should.not.exist
irá validar se o valor fornull
então esta resposta não está correta. @ Daniel tem a resposta a seguir:should.equal(testedValue, undefined);
. Essa deve ser a resposta aceita.como mencionado na documentação chai
fonte
.equal()
. Eu posso entender porque @OurManInBananas pediu uma explicação. É um uso inesperado de deveria como uma função que aceita dois argumentos, em vez da forma de método encadeada esperada que aceita um único argumento para o valor esperado. Você só pode conseguir isso importando / exigindo e atribuindo uma versão invocada de.should()
conforme descrito na resposta aceita por @DavidNorman e nesta documentação ..equal
sintaxe produz mensagens de erro muito melhores porque permite que vocêTeste para indefinido
Teste para nulo
Teste para falso, ou seja, tratado como falso em condições
fonte
fonte
Tive dificuldade em escrever a instrução deve para testes indefinidos. O seguinte não funciona.
Eu encontrei as seguintes soluções.
se também pode escrever como uma verificação de tipo
Não tenho certeza se o acima é o caminho certo, mas funciona.
De acordo com a postagem do fantasma no github
fonte
Experimente isto:
fonte
A resposta de @ david-norman está correta de acordo com a documentação. Tive alguns problemas com a configuração e optei pelo seguinte.
(typeof scope.play (10)). should.be.undefined;
fonte
typeof
operador retorna uma string ; portanto, essa afirmação não poderia ser aprovada; cuz'undefined' !== undefined
Não se esqueça da combinação de palavras-chave
have
enot
:fonte
Você pode envolver o resultado da função
should()
e testar um tipo de "indefinido":fonte