1
resposta

Teste com Jasmine - retorno em object Promise

Preciso urgentemente criar um teste unitário pra testar essa função envioPagarMe. Pra isso to usando Jasmine e coloquei num .json um caso que já testamos e foi resolvido pela promise, mas to com muito problema pra estruturar o teste, por que não sei como gerar a condição de aprovação apropriadamente. No momento, estou tentando resolver a promise e devolver um true se for resolvida e false se foi rejeitada, mas rodando os testes recebo:

1) Teste do model envioPagarMe deve funcionar o caso teste 'aprovado'
  Message:
    Expected [object Promise] to equal true.
  Stack:
    Error: Expected [object Promise] to equal true.

Meus códigos:

envioPagarMe.js:

const pagarme = require("pagarme");
const log = require("./log");

function envioPagarMe(obj) {
  return new Promise(function (resolve, reject) {
    pagarme.client
      .connect({ api_key: "###" })
      .then((client) => client.transactions.create(obj))
      .then((transaction) => {
        log.info("transacao gerada.");
        resolve(transaction);
      })
      .catch((error) => {
        log.error(error.response.errors);
        reject(error);
      });
  });
}

module.exports = { envioPagarMe };

transactionSpec.js:

var { envioPagarMe } = require("../src/models/envioPagarMe");
var objAprovado = require("../spec/data/objAprovado.json");

var casoAprovado = new Promise((resolve, reject) => {
  envioPagarMe(objAprovado)
    .then((ok) => {
      return true;
    })
    .catch((err) => {
      return false;
    });
});

//var casoReprovado = await envioPagarMe(objReprovado);

describe("Teste do model envioPagarMe", () => {
  it("deve funcionar o caso teste 'aprovado'", () => {
    expect(casoAprovado).toEqual(true);
  });
});
1 resposta

Hugo, tudo bem? O problema está no seu expect(casoAprovado), pois ele está rodando o expect antes de o casoAprovado ser resolvido.

Você pode resolver de alguns jeitos, segue uma sugestão:

describe("Teste do model envioPagarMe", () => {
  it("deve funcionar o caso teste 'aprovado'", () => {
    casoAprovado().then((result)=>{
    expect(result).toEqual(true);
    })
  });
});

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software