Тестирование типа Concept в Hypledger Composer с Cucumber

Если бы у вас была концепция адреса (как показано здесь), то как бы вы записать функции огурца для учета требуемой концепции адреса в активе? Я вижу, как это сделать с примерами mocha.js, используя factory.newConcept(), но возможно ли это сделать с помощью огурца?

  And I have added the following assets of type org.acme.Address
      | addressId   | street1         | city    | state    | zipcode  |
      | AddressA    | 123 West 3rd   | Anywhere  | Texas    | 12345    |
      | AddressB    | 123 West 3rd | Anywhere  | Texas    | 12345   |
  And I have added the following assets of type org.acme.Delivery
      | loadId   | start    | end |
      | 1        |  AddressA  | AddressB    |
      | 2        | AddressA  | AddressB    |

Определение моделей:

concept Address {
  o String street1
  o String street2 optional
  o String city
  o String state
  o String zipcode
  o Double latitude optional
  o Double longitude optional
}

asset Delivery identified by loadId {
  o String loadId
  o Address start
  o Address end
}

Я попытался передать хэш аргументов в начальный столбец, но это не сработало и получило ошибку

ValidationException: нарушение модели в экземпляре класса org.acme.Delivery#1 org.acme.Address имеет значение addressConcept, ожидаемое как ресурс или понятие.


person jgraft    schedule 14.07.2017    source источник


Ответы (2)


При тестировании сложных данных с помощью Cucumber вам нужно использовать JSON вместо формата таблицы данных. Вот пример:

https://github.com/hyperledger/composer/blob/master/packages/composer-cucumber-steps/features/assets.feature#L14

Scenario: given I have added the following asset
    Given I have added the following asset
        """
        {"$class":"org.acme.sample.SampleAsset", "assetId":"1", "owner":"[email protected]", "value":"10"}
        """
    Then I should have the following asset
        """
        {"$class":"org.acme.sample.SampleAsset", "assetId":"1", "owner":"[email protected]", "value":"10"}
        """

Везде, где вы видите таблицу данных, вы должны вместо этого предоставить JSON, включая массивы:

https://github.com/hyperledger/composer/blob/master/packages/composer-cucumber-steps/features/assets.feature#L34

Scenario: given I have added the following assets
    Given I have added the following assets
        """
        [
            {"$class":"org.acme.sample.SampleAsset", "assetId":"1", "owner":"[email protected]", "value":"10"},
            {"$class":"org.acme.sample.SampleAsset", "assetId":"2", "owner":"[email protected]", "value":"20"}
        ]
        """
    Then I should have the following assets
        """
        [
            {"$class":"org.acme.sample.SampleAsset", "assetId":"1", "owner":"[email protected]", "value":"10"},
            {"$class":"org.acme.sample.SampleAsset", "assetId":"2", "owner":"[email protected]", "value":"20"}
        ]
        """
person Simon Stone    schedule 14.07.2017
comment
Спасибо Саймон. Вы очень полезны и кладезь знаний! - person jgraft; 19.07.2017

Ответ Саймона хорош, но на самом деле не отвечает на вопрос, который был задан (хотя и в некотором роде).

Если можно, я хотел бы нанести удар (я предполагаю, что org.acme — это пространство имен):

Нужный вам огурец выглядит так:

Scenario: given I have added the following asset
    Given I have added the following asset
    """
    {"$class":"org.acme.Delivery", "loadId":"1", "start":{"$class":"org.acme.Address", "addressId":"AddressA", "street1":"123 West 3rd", "city":"Anywhere", "state": "Texas", "zipcode":"12345"}, "end":{"$class":"org.acme.Address", "addressId":"AddressB", "street1":"123 West 3rd", "city":"Anywhere", "state": "Texas", "zipcode":"12345"}}
    """
    Then I have added the following asset
    """
    {"$class":"org.acme.Delivery", "loadId":"1", "start":{"$class":"org.acme.Address", "addressId":"AddressA", "street1":"123 West 3rd", "city":"Anywhere", "state": "Texas", "zipcode":"12345"}, "end":{"$class":"org.acme.Address", "addressId":"AddressB", "street1":"123 West 3rd", "city":"Anywhere", "state": "Texas", "zipcode":"12345"}}
    """ 

Обратите внимание на объект nested Address, использующий стандартный синтаксис вложения JSON.

Опять же, я думаю, что ответ Саймона был хорошим, но если вы не эксперт JSON, расширение его ответа (на совершенно другой сценарий) на тот, который был задан, может быть сложной задачей.

Помимо того факта, что начальный и конечный адреса идентичны (и 12345 не является допустимым почтовым индексом в Техасе), это должно точно ответить на заданный вопрос.

--jsp

person J Steven Perry    schedule 18.10.2017