Eu sou novo no Jasmine e comecei a usá-lo. Eu tenho um arquivo js de biblioteca com muitas funções que não estão associadas a nenhum objeto (ou seja, são globais). Como faço para espionar essas funções?
Tentei usar a janela / documento como objeto, mas o espião não funcionou, mesmo que a função tenha sido chamada. Eu também tentei envolvê-lo em um objeto falso da seguinte maneira:
var fakeElement = {};
fakeElement.fakeMethod = myFunctionName;
spyOn(fakeElement, "fakeMethod");
e teste com
expect(fakeElement.fakeMethod).toHaveBeenCalled();
Isso também não funciona, pois o espião não funcionou
fonte
test = jasmine.createSpy();
para espionar AngularJS$anchroScroll
funcionou perfeitamente$window.open(url, '_blank');
com a intenção de abrir uma nova guia (ou janela, dependendo da configuração do navegador). Como devo ter certeza de que está chamando essa função e verificando se está navegando para o URL certo, independentemente do navegador?Usuários do TypeScript:
Eu sei que o OP perguntou sobre javascript, mas para qualquer usuário TypeScript que se depare com isso que queira espionar uma função importada, eis o que você pode fazer.
No arquivo de teste, converta a importação da função a partir disso:
Para isso:
Então você pode espionar
FooFunctions.foo
:)fonte
export const FooFunctions = { bar, foo };
e a importação no teste se tornarimport { FooFunctions } from '../foo_functions'.
No entanto, o alias ainda precisa ser explicitamente usado na implementação privada de foo_functions para que o espião funcione.const result = FooFunctions.foo(params)
// relatórios de espionagem chamarconst result = foo(params)
// espião relata nenhuma chamadaError: <spyOn> : parseCookie is not declared writable or has no setter
Há 2 alternativas que eu uso (para jasmim 2)
Este não é bem explícito, porque parece que a função é realmente falsa.
O segundo mais detalhado, mais explícito e "mais limpo":
-> código fonte de jasmim para ver o segundo argumento
fonte
Uma maneira muito simples:
fonte
Isso funcionou para mim.
fonte
Minha resposta difere um pouco do @FlavorScape, pois eu tinha uma única função (exportação padrão) no módulo importado, fiz o seguinte:
fonte