1
votes

String.split () dans Karate Feature File renvoyant des exceptions

Je ne sais pas comment je peux séparer la chaîne de réponse d'une fonctionnalité déjà créée pour obtenir la valeur de l'en-tête de réponse "Location".

Ce que j'ai essayé

1)

Feature: Create Tariff

  Background:
  * def result = call read('../../get-user-token.feature')
  * def serviceId = call read('create-service.feature').responseHeaders['Location'].split('/')[1]

  Scenario: Create Tariff
    Given url 'https://app-dev.topbox.pro/tariff-svc/api/v1/tariffs'
    And header Authorization = result.response.token_type + " " + result.response.access_token
    And request
      """
      {
      serviceTypeId: '#(serviceId)',
      owner: 1,
      type: 0,
      pencePerMile: '69.69',
      minMileage: '1.00',
      minCost: 5,
      zoneFrom: '',
      zoneTo: '',
      fixedCost: 0
      }
      """
    When method POST
    Then status 201

Ce qui a abouti à ...

IntegrationTests.TestSetup.create-tarif: create-fee.feature: 10 - net.minidev.json.parser.ParseException: jeton L inattendu à la position 46. ​​

2)

Feature: Create Tariff

  Background:
  * def result = call read('../../get-user-token.feature')
  * def serviceId = call read('create-service.feature')

  Scenario: Create Tariff
    Given url 'https://app-dev.topbox.pro/tariff-svc/api/v1/tariffs'
    And header Authorization = result.response.token_type + " " + result.response.access_token
    And request
      """
      {
      serviceTypeId: '#(serviceId.responseHeaders['Location'].split('/')[1])',
      owner: 1,
      type: 0,
      pencePerMile: '69.69',
      minMileage: '1.00',
      minCost: 5,
      zoneFrom: '',
      zoneTo: '',
      fixedCost: 0
      }
      """
    When method POST
    Then status 201

Ce qui a abouti à ...

fonctionnalités ayant échoué: IntegrationTests.TestSetup.create-tarif: -unknown-: 5 - Échec de l'évaluation JavaScript: read ('create-service.feature'). responseHeaders ['Location']. split ('/') 1 , TypeError: impossible de lire la propriété "Location" depuis undefined dans à ligne numéro 1

REMARQUE La fonctionnalité spécifiée "create-service.feature" fonctionne effectivement lorsqu'elle est isolée et produit l'en-tête de réponse, comme indiqué ci-dessous

 Location Header Response

p >


0 commentaires

3 Réponses :


1
votes

Vous devez utiliser une fonction Javascript: https://github.com/intuit/karate # javascript-functions

* def service = { key : "someinfo/myServiceId"}
* def func = function(service){return service.key.split('/')[1]}
* def serviceId = func(service)
* match serviceId == "myServiceId"

MODIFIER:

* def greeter = function(name){ return 'hello ' + name }
* assert greeter('Bob') == 'hello Bob'


2 commentaires

malheureusement, cela ne semble pas fonctionner non plus. eval> à la ligne numéro 1 "


Ensuite, le problème doit être avec service.responseHeaders ['Location'], et non avec le fractionnement. J'ai modifié ma réponse avec un appel de travail à split ().



1
votes

Je pense que la première erreur est due à des guillemets simples dans votre expression, essayez d'échapper à cela

comme,

* def serviceId = call read('create-service.feature').responseHeaders.Location[0].split('/')[1]

Edit: Je viens de noter chaque valeur dans responseHeader a une valeur de type liste alors accédez-y comme Emplacement [0]

Et votre deuxième approche devrait être quelque chose comme ça,

And request
"""
{
serviceTypeId: '#(serviceId.responseHeaders.Location[0].split(\'/\')[1])',
owner: 1,
type: 0,
pencePerMile: '69.69',
minMileage: '1.00',
minCost: 5,
zoneFrom: '',
zoneTo: '',
fixedCost: 0
}
"""


1 commentaires

malheureusement, la réponse côté serveur a pris cela comme une chaîne littérale '"detail": {"Property": "serviceTypeId", "Message": "Invalid guid format", "Value": "# (serviceId.responseHeaders.Location [0] .spl‌ it ('/') [1]) "}} 'plutôt que la valeur réelle de l'en-tête de réponse d'emplacement



5
votes

Utilisez lastIndexOf au lieu de split:

* def location = responseHeaders['Location'][0]
* def serviceId = location.substring(location.lastIndexOf('/') + 1)


0 commentaires