如何在behat中替换URL并传递数据

时间:2017-02-03 17:01:42

标签: behat

我只是在学习如果这是非常基本的那么道歉。我有这样的场景:

const list = new schema.Entity('lists', { todos: new schema.Array(todo) } , { idAttribute: '_id' });
const normalizedData = normalize(data, new schema.Array(list));

因此,第一个场景建立连接,然后JSON返回一个整数值。我现在希望值替换为URL具有{id}占位符的下一个场景。

我尝试在第一个场景的FeatureContext.php文件中将$ this->输出设置为body(返回的整数),然后在第二个场景中执行preg_replace以将{id}更改为整数。似乎在运行第二个场景时,在调用该场景之前,输出将被清空。

以上是我的上下文方法:

Scenario: Create Task
    Given I have the JSON payload:
    """
    {
            "task_list_id" : 3,
            "title" : "From Behat",
            "display_order" : 1
    }
    """
    When I send a POST request to task
    Then one SQL ident is created

Scenario: Get the Task
  When I send a GET request to "tasklist/{id}/tasks"
  Then The response code should be 200
  And The response content type should be "application/json"

1 个答案:

答案 0 :(得分:-1)

当然是空白的,场景是并且应该是独立的,无论你在第一个场景中保存什么,都会在场景完成后丢失。

这样做的一种方法是写入文件并从文件中读取。

无论如何,我看到第一个场景的验证包括来自第二个场景的验证,唯一的区别是,在第一个场景中,你是保存响应的主体,不是一个很好的主意,也不是一个好的做法来保存验证步骤中的数据。

尝试尽可能多地重复使用。

  

场景保持独立。您应该能够在没有第一个场景的情况下运行第二个场景。

高级别的例子,只是一个意见:

Scenario: Api - check response of the created task
   Given I have the JSON payload
   When I create a task using POST request -> create request, make sure is successful and save response
   And I send a GET request to created task -> use saved response to do what you need
   Then the response code should be 200
   And the response code should be "application/json" 

另一个例子:

Scenario: Api - check response of the created task
   Given I have have a task based on JSON: -> create request, make sure is successful and save response
   When I send a GET request to created task -> use saved response to do what you need
   Then the response code should be 200
   And the response code should be "application/json" 

这些只是一些例子,我不知道功能,我相信你的手杖做得更好,总是创建步骤,记住你的项目业务语言,以便以后了解它们。

taskList方法 您需要确保您有一个taskList,如果需要,您需要检查一个taskList是否可用(例如标题),如果是,则不执行任何其他操作创建任务列表。