N予備校「プログラミング入門Webアプリ」を受講しています。
今回は第4章16,17節です。
設計手順
ユースケース
- ユースケースの想定
- サービス名とプロジェクト名
- サービスの内容
- 要件定義
- 要件に上がった用語の定義。用語・変数などで利用する英単語や意味の定義
- データモデリング。エンティティのリレーションを考える。
インターフェース
- URL設計。ページの構成。
- ページのURLを考える。メソッド(POSTやGET)とページの内容。
- APIのURLを考える。メソッド、処理内容、利用方法(HTML,AJAX)。
モジュール
- モジュールの設計。フレームワークを利用するか。
-
router
モジュールを考える。routes/
にどういうファイルが必要か。 - データベースをどこでどう管理するか。
出来上がったデータモデルで基本要件を満たすか、
要件漏れや根本的な仕組みに問題がないかをチェックする。
ある程度フワッとしててもいい?
ユースケース
実際にシステムがユーザーに利用されるやりとりのこと
機能要件
必要な機能、基本的な要件
非機能要件
機能に付随する性能、セキュリティに関する要件など
MVC (Model, View, Control)
リクエストのルーティングを行う処理をコントロールする部分、
エンティティのモデリングや振る舞いと永続化などの処理をする部分、
表示内容の形式を定義する部分を分割する構造のこと
アカウント認証が必要なテスト
yarn add supertest@3.1.0 --dev
yarn add passport-stub@1.1.1 --dev
supertest
テスト内でExpressのサーバーを起動することなくRouter
の挙動をテストできる。
passport-stub
passport
の認証が邪魔になるときに、その挙動をコントロールできる。
const request = require('supertest');
const app = require('../app');
const passportStub = require('passport-stub');
describe('/login', () => {
beforeAll(() => {
passportStub.install(app);
passportStub.login({username: 'testuser'});
});
afterAll(() => {
passportStub.logout();
passportStub.uninstall(app);
});
test('ログインのためのリンクが含まれる', () =>{
return request(app)
.get('/login')
.expect('Content-Type', 'text/html; charset=utf-8')
.expect(/<a href="\/auth\/github"/)
.expect(200);
});
test('ログイン時はユーザー名が表示される', () =>{
return request(app)
.get('/login')
.expect(/testuser/)
.expect(200)
});
});
request(app).get('/login')
/login
へのGET
リクエストを作成する。
beforeAll
全ての処理の前に実行する。
afterAll
最後に実行する。
まとめ
本格的にWebサービスを作っていってるんですが、なんとか理解しながら進めていってます。設計の手順は一通りではないと思いますが、自分で作っていく時に参考になるのかなと。