Результаты тестирования эластичного поиска PhpUnit пусты - PullRequest
0 голосов
/ 27 августа 2018

Я пишу методы тестирования своего приложения, и в своем приложении я использую эластичный поиск. Когда я запускаю тестовый метод, который должен возвращать значения с использованиемasticsearch, ответ всегда пуст. Как я могу решить проблему? Вот код, который я отправляю.

public function testGetPosts()

{
    $brand = factory(Brand::class)->create();
    $account = factory(Account::class)->create();
    $post = factory(Post::class)->create();

    $response = $this->actingAs($this->owner)->json(
        'GET',
        ('/api/publish/posts'),
        ['account_id' => [(string) $account->id],
        'skip' => 0]
    );

    $response->assertStatus(200);
}

1 Ответ

0 голосов
/ 06 июля 2019

Почти год спустя, я уверен, что вы уже перешли.

Вы заявили:

Эластичный поиск не индексирует созданный пост. Это должно быть проиндексировано Почему это будет проиндексировано? Если, конечно, у вас нет кода для индексации в вашем setUp() или при тестировании на внешнем сервере ES и при условии, что он всегда доступен и содержит точные данные, с которыми вы тестируете.

Другое решение состоит в том, чтобы смоделировать запрос, поскольку Elasticsearch возвращает JSON. Все, что нам нужно сделать, это смоделировать HTTP-запрос, который имеет статус 200 и возвращает JSON. Этот JSON-файл мы можем поместить в наш каталог tests/, и он будет содержать примеры результатов, которые Elasticsearch выдаст.

Пример теста хотел бы это;

$handler = new MockHandler([
    'status' => 200,
    'transfer_stats' => [
        'total_time' => 100
    ],
    'body' => fopen(base_path('tests/Unit/mockelasticsearch.json'), 'r')
]);

$builder = ClientBuilder::create();
$builder->setHosts(['testing']);
$builder->setHandler($handler);
$client = $builder->build();
$response = $client->search([
    'index' => 'my_index',
    'type' => 'my_type',
    'body' => [
        [  
            'query' => [
                'simple_query_string' => [
                    'query' => 'john',
                    'fields' => ['name']
                ]
            ]
        ]
    ]
]);

// Test against the "$response", i.e., $this->assertEquals(2 ...) etc.

Затем в файле JSON, который вам нужно будет настроить на основе вашего индекса;

{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 121668,
    "max_score": 1,
    "hits": [
      {
        "_index": "test",
        "_type": "test-type",
        "_id": "1111",
        "_score": 1,
        "_source": {
          "id": "1111",
          "title": "Some Foo",
          "timestamp": "2017-08-02T15:45:22-05:00"
        }
      },
      {
        "_index": "test",
        "_type": "test-type",
        "_id": "2222",
        "_score": 1,
        "_source": {
          "id": "2222",
          "title": "Dolor Sit Amet",
          "timestamp": "2017-08-02T15:45:22-05:00"
        }
      },
      {
        "_index": "test",
        "_type": "test-type",
        "_id": "3333",
        "_score": 1,
        "_source": {
          "id": "3333",
          "title": "Consectetur Adipiscing Elit",
          "timestamp": "2017-08-02T15:45:22-05:00"
        }
      },
      {
        "_index": "test",
        "_type": "test-type",
        "_id": "4444",
        "_score": 1,
        "_source": {
          "id": "4444",
          "title": "Sed Do Eiusmod",
          "timestamp": "2017-08-02T15:45:22-05:00"
        }
      },
      {
        "_index": "test",
        "_type": "test-type",
        "_id": "5555",
        "_score": 1,
        "_source": {
          "id": "5555",
          "title": "Tempor Incididunt",
          "timestamp": "2017-08-02T15:45:22-05:00"
        }
      },
      {
        "_index": "test",
        "_type": "test-type",
        "_id": "6666",
        "_score": 1,
        "_source": {
          "id": "6666",
          "title": "Ut Labore Et Dolore",
          "timestamp": "2017-08-02T15:45:22-05:00"
        }
      },
      {
        "_index": "test",
        "_type": "test-type",
        "_id": "7777",
        "_score": 1,
        "_source": {
          "id": "7777",
          "title": "Magna Aliqua",
          "timestamp": "2017-08-02T15:45:22-05:00"
        }
      },
      {
        "_index": "test",
        "_type": "test-type",
        "_id": "8888",
        "_score": 1,
        "_source": {
          "id": "8888",
          "title": "Ut Enim Ad Minim",
          "timestamp": "2017-08-02T15:45:22-05:00"
        }
      },
      {
        "_index": "test",
        "_type": "test-type",
        "_id": "9999",
        "_score": 1,
        "_source": {
          "id": "9999",
          "title": "Veniam, Quis Nostrud",
          "timestamp": "2017-08-02T15:45:22-05:00"
        }
      },
      {
        "_index": "test",
        "_type": "test-type",
        "_id": "0000",
        "_score": 1,
        "_source": {
          "id": "0000",
          "title": "Exercitation Ullamco Laboris",
          "timestamp": "2017-08-02T15:45:22-05:00"
        }
      }
    ]
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...