Я пытаюсь запустить специальные тесты для моих вызовов 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 не определено, и я не знаю, как вызывать мои тесты, чтобы они имели доступ как к серверу, так и к клиенту.
Есть ли способ сделать это?Я подумал, что может иметь больше смысла просто запускать тесты со стороны клиента, но даже тогда мне все равно нужен доступ к серверу, поэтому мне все еще нужно выяснить, как тестировать оба одновременно