Я пришел к выводу, что единственным способом действительно модульных тестовых экспресс-приложений является поддержание большого разделения между обработчиками запросов и вашей основной логикой.
Таким образом, ваша логика приложения должна быть в отдельных модулях, которые могут быть require
d и проверены модулем, и имеют минимальную зависимость от классов Express Request и Response как таковых.
Затем в обработчиках запросов вам нужно вызвать соответствующие методы вашей основной логики классы.
Я приведу пример, как только закончу реструктуризацию моего текущего приложения!
Я думаю, что-то вроде this? (Не стесняйтесь fork the gist или comment, я все еще изучаю это).
Изменить
Вот крошечный пример, встроенный. См. gist для более подробного примера.
/// usercontroller.js
var UserController = {
_database: null,
setDatabase: function(db) { this._database = db; },
findUserByEmail: function(email, callback) {
this._database.collection('usercollection').findOne({ email: email }, callback);
}
};
module.exports = UserController;
/// routes.js
/* GET user by email */
router.get('/:email', function(req, res) {
var UserController = require('./usercontroller');
UserController.setDB(databaseHandleFromSomewhere);
UserController.findUserByEmail(req.params.email, function(err, result) {
if (err) throw err;
res.json(result);
});
});
Поместите и две кнопки в ConstraintLayout. Затем дайте кнопкам правильные правила, чтобы они оставались в нижней части макета, и измените тег так, чтобы он выглядел следующим образом:
<include
android:layout_height="0dp"
android:layout_width="match_parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@id/projectOverviewCreateProject"
layout="@layout/content_project_list" />
РЕДАКТИРОВАТЬ: чтобы решить проблему, связанную с RecyclerView, перекрывающим appBar просто добавьте это в свой ConstraintLayout:
app:layout_behavior="@string/appbar_scrolling_view_behavior"