如果library是在一个合约内部调用应该使用internal可见性

您将函数的可见性设置为external。在这种情况下,您必须部署该库,然后需要在合约部署中为该库指定一个链接。解决问题的方法是使功能可见internal。

  beforeEach(async () => {
    signers = await ethers.getSigners();

    const Lib = await ethers.getContractFactory("TokenTrait");
    const lib = await Lib.deploy();
    await lib.deployed();

    const contractFactory = await ethers.getContractFactory("SampleNft", {
      signer: signers[0],
      libraries: {
        TokenTrait: lib.address,
      },
    });

    contract = await contractFactory.deploy();
  });