松露测试失败,并显示错误:找不到工件

时间:2018-12-21 03:21:34

标签: solidity truffle

我学习了该演示:测试时,代码来自:https://truffleframework.com/tutorials/pet-shop

$ truffle.cmd test
Using network 'development'.

Compiling .\test\TestAdoption.sol...


TestAdoption
1) "before all" hook: prepare suite


0 passing (30s)
1 failing

1) TestAdoption
   "before all" hook: prepare suite:
Error: Could not find artifacts for /E/blockchain/pet-            
shop/contracts/Adoption.sol from any sources
at Resolver.require (D:\nvm\v10.14.2\node_modules\truffle\build\webpack:\packages\truffle-resolver\index.js:37:1)
  at TestResolver.require (D:\nvm\v10.14.2\node_modules\truffle\build\webpack:\packages\truffle-core\lib\testing\testresolver.js:17:1)
  at TestResolver.require (D:\nvm\v10.14.2\node_modules\truffle\build\webpack:\packages\truffle-core\lib\testing\testresolver.js:17:1)
  at dependency_paths.forEach.dependency_path (D:\nvm\v10.14.2\node_modules\truffle\build\webpack:\packages\truffle-core\lib\testing\soliditytest.js:203:1)
  at Array.forEach (<anonymous>)
  at deployer.deploy.then (D:\nvm\v10.14.2\node_modules\truffle\build\webpack:\packages\truffle-core\lib\testing\soliditytest.js:202:1)
  at D:\nvm\v10.14.2\node_modules\truffle\build\webpack:\packages\truffle-deployer\src\deferredchain.js:20:1
  at process._tickCallback (internal/process/next_tick.js:68:7)

我最近更新了我的nodejs,并安装了window-build-tools,它不起作用。

TestAdoption.sol:

pragma solidity ^0.5.0;

import "truffle/Assert.sol";
import "truffle/DeployedAddresses.sol";
import "../contracts/Adoption.sol";

contract TestAdoption {
    Adoption adoption = Adoption(DeployedAddresses.Adoption());
    function testUserCanAdoptPet() public {
        uint returnedId = adoption.adopt(expectedPetId);

        Assert.equal(returnedId, expectedPetId);
    }
    uint expectedPetId = 8;

    address expectedAdopter = address(this);
    function testGetAdopterAddressByPetId() public {
        address adopter = adoption.adopters(expectedPetId);
        Assert.equal(adopter, expectedAdopter, "Owner of the expected pet should be this contract");
    }

    function testGetAdopterAddressByPetIdInArray() public {
        address[16] memory adopters = adoption.getAdopters();
        Assert.equal(adopters[expectedPetId], expectedAdopter, "Owner of the expected pet should be this contract");
    }    

}

2_deploy_contracts.sol:

var Adoption = artifacts.require("Adoption");

module.exports = function(deployer) {
    deployer.deploy(Adoption);
};

然后import "truffle/Assert.sol"; vscode说:找不到源“ truffle / Assert.sol”:不支持文件导入回调。我朋友的版本是0.4.14,并且运行良好,可能是版本问题吗?

enter image description here

这是项目目录(仅为https://truffleframework.com/tutorials/pet-shop的演示):

enter image description here

1 个答案:

答案 0 :(得分:0)

松露的 v5.1.10 版本(当前)不会发生此错误。

我的完整错误是:

TypeError: Error parsing C:/Users/PATH/yourSmartContract.sol: Cannot destructure property 'body' of 'undefined' as it is undefined.

我的解决方案是像这样降级版本:

  1. $ npm uninstall -g truffle
  2. $ npm install -g truffle@v5.1.10

(由于版本控制和管理,很难在BC中进行开发。请保持良好的工作状态。)