@types/2.5.46
e tive problemas.Definitions by:
em index.d.ts
) para que eles possam responder .Em 2.5.45, fui capaz de fazer algo assim:
expect(element(by.id('id')).getAttribute('attr')).toEqual('myValue');
Agora me dá um erro
TS2345:Argument of type '"myValue"' is not assignable to parameter of type 'Expected<Promise<string>>'.
Ele para de reclamar se eu adicionar .toString após getAttribute, mas não tenho certeza se funcionará.
Sim, este é um grande problema para qualquer pessoa que use transferidor no TypeScript.
Parece que o Jasmine (ou talvez a versão do Protractor do Jasmine se ele o modificar - não tenho certeza?) Apóia a expectativa de uma promessa e, em seguida, o teste do valor resolvido da promessa, sem que o autor do teste tenha que resolver a promessa por conta própria.
Parece que @ lukas-zech-software tornou as correspondências genéricas, o que é muito legal, mas quebra as promessas e a correspondência com os valores resolvidos.
Como já mencionado nos comentários do PR, isso não é nada que a digitação do jasmim possa fazer.
Transferidor estende a funcionalidade, portanto, ele deve fornecer as digitações para isso.
Se fosse alguma digitação para transferidor em DefinitelyTyped, isso teria ocorrido durante os testes, mas não há, então não posso corrigir isso aqui.
Na verdade, o Transferidor não fornece nenhuma tipificação para isso, então eles simplesmente contam com expect
aceitando any
como parâmetro
Eu dificilmente posso adicionar tipificações para um expect
assíncrono que não funcionará no próprio jasmim.
Abra um problema com o transferidor e peça que estendam as digitações de jasmim corretamente.
Até que isso seja corrigido, existem várias soluções alternativas:
Corrija a versão das digitações para
Isso simplesmente usará a versão de trabalho mais recente.
Corrigir a versão das tipificações parece se tornar uma prática recomendada, já que as tipificações não podem seguir o SemVer e as alterações na versão secundária podem facilmente interromper sua construção.
Veja estes problemas:
https://github.com/DefinitelyTyped/DefinitelyTyped/issues/14579
https://github.com/DefinitelyTyped/DefinitelyTyped/issues/14569
https://github.com/DefinitelyTyped/DefinitelyTyped/issues/14338
https://github.com/DefinitelyTyped/DefinitelyTyped/pull/13994#issuecomment -275949045
Use any
como parâmetro genérico para expect
As novas tipificações ainda permitem que você tenha o comportamento antigo, você só precisa especificar explicitamente que deseja usar any
como tipo assim
expect<any>(element(by.id('id')).getAttribute('attr')).toEqual('myValue');
expect
e adicione-as ao seu projeto // UNTESTED CODE!
interface AsyncMatchers<T> extends Matchers<Promise<T>> {
toBe(expected: Expected<T>, expectationFailOutput?: any): boolean;
toEqual(expected: Expected<T>, expectationFailOutput?: any): boolean;
toContain(expected: T, expectationFailOutput?: any): boolean;
not: AsyncMatchers<T>;
}
Adicione este código em um protractor.d.ts
em seu projeto em algum lugar que o compilador TypeScript possa ver e ele deve resolver seus problemas, dada a promessa em expect
na verdade, resolve para o tipo fornecido em toEqual
Legal, obrigado por esclarecer isso @ lukas-zech-software. Aprecie as diferentes soluções. Acabei bloqueando as digitações para uma versão anterior por enquanto.
Sugira que isso pode ser fechado.
Usando async / await para "desreferenciar" a promessa funciona.
Por exemplo, em vez de
it('should have header', () => {
let subject = element(by.css('h1')).isPresent();
let result = true;
expect(subject).toEqual(result);
});
tem como
it('should have header', async () => {
let subject = await element(by.css('h1')).isPresent();
let result = true;
expect(subject).toEqual(result);
});
Espero(
para
Espero
funcionou para mim
Instalando @types/jasminewd
funciona para mim, do link
beforeEach (() => {
página = novo xxx ();
browser.waitForAngularEnabled (false);
});
isso resolve o problema
Para mim, ajustar tsconfig.e2e.json
por este comentário funcionou. Meu problema apareceu ao atualizar do Angular 4 para o 5 em um projeto gerenciado pela CLI.
https://github.com/angular/protractor/issues/4176#issuecomment -310610380
Se você pode conviver com a imprecisão, uma solução alternativa diferente parece ser alijar toEqual com a string e pedir, em vez disso, toContain.
instalar @types/jasminewd2
resolveu o problema para mim
Para mim, ajustar
tsconfig.e2e.json
por este comentário funcionou. Meu problema apareceu ao atualizar do Angular 4 para o 5 em um projeto gerenciado pela CLI.
angular / transferidor # 4176 (comentário)
Instalar @types/jasminewd2
e fazer isso é a resposta correta.
Aviso, instalação de @types/jasminewd2
__IS NOT__ uma resposta correta:
jasminewd2
não é necessariamente compatível com tipificações de jasmim para v3, pois tem como alvo jasmim v2any
-d todas as entradas.A resposta correta é:
expectAsync
disponível na versão mais recente do jasmim.
Comentários muito úteis
Até que isso seja corrigido, existem várias soluções alternativas:
Corrija a versão das digitações para
Isso simplesmente usará a versão de trabalho mais recente.
Corrigir a versão das tipificações parece se tornar uma prática recomendada, já que as tipificações não podem seguir o SemVer e as alterações na versão secundária podem facilmente interromper sua construção.
Veja estes problemas:
https://github.com/DefinitelyTyped/DefinitelyTyped/issues/14579
https://github.com/DefinitelyTyped/DefinitelyTyped/issues/14569
https://github.com/DefinitelyTyped/DefinitelyTyped/issues/14338
https://github.com/DefinitelyTyped/DefinitelyTyped/pull/13994#issuecomment -275949045
Use
any
como parâmetro genérico paraexpect
As novas tipificações ainda permitem que você tenha o comportamento antigo, você só precisa especificar explicitamente que deseja usar
any
como tipo assimexpect
e adicione-as ao seu projetoEsta seria a melhor solução, mas deve ser feita pelo Transferidor
Provavelmente seria algo como
Adicione este código em um
protractor.d.ts
em seu projeto em algum lugar que o compilador TypeScript possa ver e ele deve resolver seus problemas, dada a promessa emexpect
na verdade, resolve para o tipo fornecido emtoEqual