簡體   English   中英

用 sinon 存根並用 chai 測試

[英]Stubbing with sinon and testing with chai

我正在用 Mocha 和 Chai 學習測試,有一個關於 stubbing 函數的問題。 我正在嘗試存根一個映射數組並以 CSV 格式返回它的函數。 但是,我的測試失敗並顯示以下消息:

參考錯誤:名字未定義

我理解這意味着測試找不到它,但我真的不明白為什么,因為我覺得我已經聲明了它? 任何幫助或將我指向正確的方向都會有所幫助。 我的代碼和測試將在下面:

export default ({
  teamId,
  allApproverUserItemsForTeam = defaultAllApproverUserItemsForTeam,
}) => {
  const teamApprovers = allApproverUserItemsForTeam({ teamId });

  const csvContent = teamApprovers.map(teamApprover =>
    `${teamApprover.firstName}, ${teamApprover.lastName}, ${teamApprover.emailAddress}`,
  );

  const joinedApproversList = csvContent.join();

  return joinedApproversList;
};
describe('create_team_approvers_csv_test', () => {
  describe('given a teamId for a team that has a list of approvers', () => {
    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', () => {
      const expected = {
        firstName,
        lastName,
        emailAddress,
      };

      const result = createTeamApproversCsv({ teamId });

      expect(result).to.be.deep.equal(expected);
    });
  });
});

也許這是一個錯字。 您沒有將存根allApproverUserItemsForTeam函數傳遞給createTeamApproversCsv函數。

例如

index.ts

//@ts-nocheck
const defaultAllApproverUserItemsForTeam = ({ teamId }) => {
  return [];
};

export default ({ teamId, allApproverUserItemsForTeam = defaultAllApproverUserItemsForTeam }) => {
  const teamApprovers = allApproverUserItemsForTeam({ teamId });

  const csvContent = teamApprovers.map(
    (teamApprover) => `${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', () => {
  describe('given a teamId for a team that has a list of approvers', () => {
    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', () => {
      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                 
----------|---------|----------|---------|---------|-------------------

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM