Как запустить тестовую команду (npm test с jasmine) одновременно на стороне сервера и клиента (полный стек React / Node) - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь запустить специальные тесты для моих вызовов fetch / api, но функциональность разделена на мой сервер (узел) и клиентскую сторону (реагировать / избыточно), поэтому, если я просто запускаю npm test, как обычно, он только запускаетна стороне сервера (клиент работает на прокси-сервере), поэтому я не могу проверить статус-коды ответов, потому что ответ не определен, потому что нет клиента, выполняющего вызов.

Как настроить мои тесты, чтобы можно было выполнить модульное / интеграционное тестирование моего приложения, когда для его работы необходимо одновременно запустить клиент и сервер?Я попытался добавить свой сценарий npm run dev, где я одновременно звоню на сервере + клиенте, в мой сценарий npm test, но он просто запустил приложение и не зарегистрировал, что я пытался выполнить какие-либо тесты.

ДляНапример, приложение отлично работает в разработке, но я пытаюсь научиться запускать модульные и интеграционные тесты, но я знаю, как настроить его только для серверного приложения или только для одностраничного клиентского приложения.Как настроить тесты, чтобы они выполнялись на клиенте и на сервере одновременно?

это мои настройки скриптов:


"scripts": {
    "client-install": "npm install --prefix client",
    "start": "node src/server.js",
    "server": "nodemon src/server.js --ignore './client'",
    "client": "npm start --prefix client",
    "dev": "concurrently \"npm run server\" \"npm run client\" ",
    "test": "export NODE_ENV=test && jasmine",
    "heroku-postbuild": "npm install --prefix client && npm run build --prefix client"
  },

В этой настройке npm test работает только на стороне сервера.

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


"test": "concurrently \"npm run server\" \"npm run client\" && export NODE_ENV=test && jasmine"

и


"test": "concurrently \"npm run server\" \"npm run client\" && jasmine"

, оба из которых только запустили приложение, но затем не запустили ни одного изtests.

Я также попытался запустить npm run dev в терминале и, как только приложение запустилось, попытаться npm test в другом окне терминала, но я только что получил ошибку, потому что порт сервера уже использовался.

это ошибки запуска тестов только на сервере:

2) routes : mood GET /api/moodtracker/history should query the mood history for the user and return them
  Message:
    Uncaught exception: TypeError: Cannot read property 'statusCode' of undefined
  Stack:
        at <Jasmine>
        at Request.request.get [as _callback] (/Users/setup/Pocket-Therabuddy/spec/integration/mood_spec.js:75:28)
        at self.callback (/Users/setup/Pocket-Therabuddy/node_modules/request/request.js:185:22)
        at Request.emit (events.js:182:13)
        at Request.onRequestError (/Users/setup/Pocket-Therabuddy/node_modules/request/request.js:881:8)
        at ClientRequest.emit (events.js:182:13)
        at Socket.socketErrorListener (_http_client.js:391:9)
        at Socket.emit (events.js:182:13)
        at emitErrorNT (internal/streams/destroy.js:82:8)
        at emitErrorAndCloseNT (internal/streams/destroy.js:50:3)
        at process._tickCallback (internal/process/next_tick.js:63:19)

3) user : routes POST /sign_up should create a new user instance
  Message:
    Uncaught exception: TypeError: Cannot read property 'statusCode' of undefined
  Stack:
        at <Jasmine>
        at Request.request.post [as _callback] (/Users/setup/Pocket-Therabuddy/spec/integration/user_spec.js:39:28)
        at self.callback (/Users/setup/Pocket-Therabuddy/node_modules/request/request.js:185:22)
        at Request.emit (events.js:182:13)
        at Request.onRequestError (/Users/setup/Pocket-Therabuddy/node_modules/request/request.js:881:8)
        at ClientRequest.emit (events.js:182:13)
        at Socket.socketErrorListener (_http_client.js:391:9)
        at Socket.emit (events.js:182:13)
        at emitErrorNT (internal/streams/destroy.js:82:8)
        at emitErrorAndCloseNT (internal/streams/destroy.js:50:3)
        at process._tickCallback (internal/process/next_tick.js:63:19)

3 specs, 3 failures
Finished in 8.779 seconds

Я думаю, это потому, что все запросы GET / POST вызываются из внешнего интерфейса, который просто работаету сервера нет доступа, поэтому нет ответа для проверки statusCode, потому что нет фактического запроса

Это один из запросов от клиента:

location: client/src/services/moodServices

async function getHistory(user) {
    const requestOptions = {
        method: 'GET',
        headers: authHeader()
    };

    const response = await fetch(`${process.env.REACT_APP_API_URL}/api/moodtracker/${user.id}/history`, requestOptions);
    const res = response.text();
    localStorage.setItem('moods', JSON.stringify(res));
    return res;
}

Res.statusCode sдля большинства он должен возвращаться как 200, а для запроса /api/moodtracker/history - 304, что они и делают, когда я фактически запускаю приложение.Но в тесте res не определено, и я не знаю, как вызывать мои тесты, чтобы они имели доступ как к серверу, так и к клиенту.

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

...