Колоть синоном и тестировать чаем

#javascript #mocha.js #chai #sinon

Вопрос:

Я нахожусь в процессе обучения тестированию с Мокко и Чаем, и у меня есть вопрос о том, чтобы отключить функцию. Я пытаюсь заглушить функцию, которая отображает массив и возвращает его в формате CSV. Однако мои тесты не проходят со следующим сообщением:

Ошибка ссылки: имя не определено

Что, как я понимаю, означает, что тест не может его найти, но я действительно не понимаю, почему, поскольку я чувствую, что объявил об этом? Любая помощь или указание мне в правильном направлении были бы полезны. Мой код и тест будут ниже:

 export default ({  teamId,  allApproverUserItemsForTeam = defaultAllApproverUserItemsForTeam, }) =gt; {  const teamApprovers = allApproverUserItemsForTeam({ teamId });   const csvContent = teamApprovers.map(teamApprover =gt;  `${teamApprover.firstName}, ${teamApprover.lastName}, ${teamApprover.emailAddress}`,  );   const joinedApproversList = csvContent.join();   return joinedApproversList; };  
 describe('create_team_approvers_csv_test', () =gt; {  describe('given a teamId for a team that has a list of approvers', () =gt; {  const teamId = randoms.randomId();  const allApproverUserItemsForTeam = sinon.stub();  const approversForTeam = [  {  id: 'fwwfw',  emailAddress: 'joe@bloggs.com',  firstName: 'Joe',  lastName: 'Bloggs',  title: 'Mr',  isTeamProfile: false,  version: 1,  },  {  id: 'wgerher6446',  emailAddress: 'jane@doe.com',  firstName: 'Jane',  lastName: 'Doe',  title: 'Mrs',  isTeamProfile: false,  version: 3,  },  ];  allApproverUserItemsForTeam.withArgs({ teamId }).returns(approversForTeam);   it('should create a list of approvers in a required CSV format', () =gt; {  const expected = {  firstName,  lastName,  emailAddress,  };   const result = createTeamApproversCsv({ teamId });   expect(result).to.be.deep.equal(expected);  });  }); });  

Ответ №1:

Может быть, это опечатка. Вы не передали заглушенную allApproverUserItemsForTeam функцию в createTeamApproversCsv функцию.

Напр.

index.ts :

 //@ts-nocheck const defaultAllApproverUserItemsForTeam = ({ teamId }) =gt; {  return []; };  export default ({ teamId, allApproverUserItemsForTeam = defaultAllApproverUserItemsForTeam }) =gt; {  const teamApprovers = allApproverUserItemsForTeam({ teamId });   const csvContent = teamApprovers.map(  (teamApprover) =gt; `${teamApprover.firstName}, ${teamApprover.lastName}, ${teamApprover.emailAddress}`,  );   const joinedApproversList = csvContent.join();   return joinedApproversList; };  

index.test.ts :

 import createTeamApproversCsv from '.'; import { expect } from 'chai'; import sinon from 'sinon';  describe('create_team_approvers_csv_test', () =gt; {  describe('given a teamId for a team that has a list of approvers', () =gt; {  const teamId = '123';  const allApproverUserItemsForTeam = sinon.stub();  const approversForTeam = [  {  id: 'fwwfw',  emailAddress: 'joe@bloggs.com',  firstName: 'Joe',  lastName: 'Bloggs',  title: 'Mr',  isTeamProfile: false,  version: 1,  },  {  id: 'wgerher6446',  emailAddress: 'jane@doe.com',  firstName: 'Jane',  lastName: 'Doe',  title: 'Mrs',  isTeamProfile: false,  version: 3,  },  ];  allApproverUserItemsForTeam.withArgs({ teamId }).returns(approversForTeam);   it('should create a list of approvers in a required CSV format', () =gt; {  const expected = ['Joe, Bloggs, joe@bloggs.com', 'Jane, Doe, jane@doe.com'].join();   const result = createTeamApproversCsv({ teamId, allApproverUserItemsForTeam });   expect(result).to.be.deep.equal(expected);  });  }); });  

результат теста:

 create_team_approvers_csv_test  given a teamId for a team that has a list of approvers  ✓ should create a list of approvers in a required CSV format    1 passing (5ms)  ----------|---------|----------|---------|---------|------------------- File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s  ----------|---------|----------|---------|---------|------------------- All files | 87.5 | 0 | 66.67 | 87.5 |   index.ts | 87.5 | 0 | 66.67 | 87.5 | 3  ----------|---------|----------|---------|---------|-------------------  

Комментарии:

1. Спасибо @slideshowp2 Я прошел тесты сейчас с вашей помощью. Вы правы, я не передавал заглушенную функцию в функцию createTeamApproversCsv. Такая маленькая ошибка, спасибо, что указали на нее.