Я использую метод sinon.stub, чтобы обернуть мой сервис в машинописный текст, который ожидает массив, однако мои фиктивные данные являются объектом, как я могу это исправить - PullRequest
2 голосов
/ 15 января 2020

Это служба, которую я ошарашиваю


class TransactionService {
  async getTransactions(
    req: RequestContract,
    query: TransactionQuery
  ): Promise<Transaction[]> {
    const token = await Auth.headless({ nuban: query.nuban });
    const iris = new Iris({ req, token, headless: true, retries: 1 });

    return iris.get<Transaction[]>(`${env.proxy_url}/transactions/`, {
      params: query
    });
  }

  filterTransaction(req: Request, transactions: Transaction[]): Transaction[] {
    const accounts = req.session.accounts.map(account => account.acccount_number);
    return transactions.filter(transaction => accounts.includes(transaction.nuban));
  }
}

export const TransactionsService = new TransactionService();

Вот мой метод заглушки


export function mockGetTransactions() {
    sinon.stub(TransactionsService, 'getTransactions').resolves(mockTransactions('0071326981')) 
}

Наконец, вот фиктивные данные

export function mockTransactions(account: string) {
  return {
    date: faker.date.recent(3),
    transaction_type: 'credit',
    amount: mockAmount(10000, 1000000, 4),
    remark: faker.random.words(10),
    reference: faker.random.words(5),
    nuban: account,
  };
}

Это ошибка, которую я получаю

TypeScript diagnostics (customize using `[jest-config].globals.ts-jest.diagnostics` option):
    __tests__/mocks/services/transaction.ts:6:65 - error TS2345: Argument of type '{ date: Date; transaction_type: string; amount: number; remark: string; reference: string; nuban: string; }' is not assignable to parameter of type 'Transaction[]'.
      Type '{ date: Date; transaction_type: string; amount: number; remark: string; reference: string; nuban: string; }' is missing the following properties from type 'Transaction[]': length, pop, push, concat, and 26 more.

    6     sinon.stub(TransactionsService, 'getTransactions').resolves(mockTransactions('0071326981'))

Итак, getTransactions ожидает транзакцию [] ie массив транзакций, в то время как я передаю объект с mockTransactions

Ответы [ 2 ]

0 голосов
/ 16 января 2020

Так что это исправило это для меня

Я создал функцию массива

export function array<T>(size: number, fake: () => T): T[] {
  const values = [];
  for (let i = 0; i < size; i++) values.push(fake());

  return values;
}

Я присвоил типу Transaction моему макету

export function mockTransaction(): Transaction {
  return {
    date: faker.date.recent(3),
    transaction_type: 'credit',
    amount: mockAmount(10000, 1000000, 4),
    remark: faker.random.words(10),
    reference: faker.random.words(5),
    nuban: '0071326981',
  };
}

И затем вернул мою функцию массива здесь

export function mockTransactions(num: number): Transaction[] {
  return array(num, mockTransaction);
}
0 голосов
/ 15 января 2020

Похоже, что ваш метод getTransactions ожидает транзакции [], поэтому вы должны иметь возможность изменить свои фиктивные данные, чтобы они возвращали массив, содержащий ваш объект транзакции.

export function mockTransactions(account: string): Transaction[] {
  return [
    {
      date: faker.date.recent(3),
      transaction_type: 'credit',
      amount: mockAmount(10000, 1000000, 4),
      remark: faker.random.words(10),
      reference: faker.random.words(5),
      nuban: account,
    }
  ];
}
...