Не допускается явное преобразование типов из "literal_string в" указатель хранилища строк " - PullRequest
0 голосов
/ 26 апреля 2018

Я разрабатываю фиктивный тестовый контракт на прочность с трюфелем, для кода ниже,

pragma solidity ^0.4.17;

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

contract TestSkillDevelopment {
    SkillDevelopment skillDevelopmentContract = SkillDevelopment(DeployedAddresses.SkillDevelopment());
    function testSetStudentEnrollInfo() public {
        skillDevelopmentContract.setStudentEnrollInfo("{\"Info\":[{\"id\":\"06bb05b8b3152b0323f4a9c07ae84f0c513b24946a8f8ec685af7cd763f7ffad\",\"studentId\":6532916,\"parenterId\":6187778,\"schemeId\":3853115,\"batchId\":3458926,\"instructorId\":1175723,\"trainingId\":2599715,\"studentSkillState\":1,\"state\":1}]}");
        string expected = string("{\"Info\":[{\"id\":\"06bb05b8b3152b0323f4a9c07ae84f0c513b24946a8f8ec685af7cd763f7ffad\",\"studentId\":6532916,\"parenterId\":6187778,\"schemeId\":3853115,\"batchId\":3458926,\"instructorId\":1175723,\"trainingId\":2599715,\"studentSkillState\":1,\"state\":1}]}");
        Assert.equal(skillDevelopmentContract.getStudentEnrollInfo(), expected, "The message should be set");
    }

}

но получаю ошибку

"TypeError: явное преобразование типов не допускается из" literal_string в "указатель хранилища строк". "

во время выполнения команды "Тест трюфеля".

Пожалуйста, подскажите, как здесь не так.

1 Ответ

0 голосов
/ 26 апреля 2018

Попробуйте вместо этого:

string memory expected = "{\"Info\":[{\"id\":\"06bb05b8b3152b0323f4a9c07ae84f0c513b24946a8f8ec685af7cd763f7ffad\",\"studentId\":6532916,\"parenterId\":6187778,\"schemeId\":3853115,\"batchId\":3458926,\"instructorId\":1175723,\"trainingId\":2599715,\"studentSkillState\":1,\"state\":1}]}";

Местоположение по умолчанию для string - storage, что означает, что вам придется указывать его на некоторую переменную состояния в хранилище. Переключение на memory решает эту проблему. Наконец, явное приведение к string не требуется (так как значение уже является строкой) и вызывает ошибку компиляции, которую вы видели.

...