Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

take2 は https://github.com/haru01/log/blob/master/pattern_sheed.md

TDD実践・学習パターン

TDDを 初心者が熟練者になって、現場で実践していくコツを書いていきます。 すべて実施する必要はありません。上から順に実施する必要もありません。 現状の診断や、自分の状況に合いそうなものを複数ピックアップして、 ベイビーステップで個人やチームの学習と成長の物語を描く道具として使われることを想定しています。

まだ未完です。ガンガン変わっていきます。 :p

let result = 0;
[1,2,3,4,5,6].forEach((n) => {
if (n % 2 === 0) {
result += n * n;
}
});
console.log(result);
const result = [1,2,3,4,5,6]
.filter(n => n % 2 === 0)
.map(n => n * n)
.reduce((a, b) => a + b, 0);
console.log(result); // (2*2) + (4*4) + (6*6)

テスティングフレームワークのインストール

TDDを試せる環境を用意する。これがなきゃ始まらない。

テストの道具を揃える

保存したら即実行、前提データの準備、UIの実行、時間をコントロールするライブラリー、モックライブラリー、Given, When, Thenのフレームワークなど道具を揃え、 すぐに書けるように準備する。

Red Green Refactor のリズム

簡単なお題でRed Green Refactorを試して、体で体感する。

@haru01
haru01 / 9.js
Last active August 1, 2019 07:22
function generateReadReport(readList, recommendList) {
return renderPlainText(readList, recommendList);
}
function renderPlainText(readList, recommendList) {
let report = `name: ${readList.name}\n`;
report += '-----\n';
for (let readBook of readList.books) {
if (readBook.times >= 1) {
report += ` - ${readBook.name}: ${point(readBook)} point\n`;
// https://github.com/j5ik2o/ticket-price-modeling
// 解き方方針: 型で問題を解くよりも、料金表のように日本人の非エンジニアの人も読めて突っ込めるコード記述を目指す.
// 解き方方針: 配列でmap&sortの世界に引き込んで安い料金を選ぶようにする.
// 解いたのは "シネマシティズン" の場合だけ。
// TODO 引数を型にして呼び出しに制約を設けるかはあとで考える。
const movePayment = (ticketType, timeTypes) => {
var payments =
{"シネマシティズン":
{"平日〜20:00": 1000,
interface Expression {
times(muptiplier: number): Expression;
plus(addend: Expression): Expression;
reduce(bank: Bank, to: string): Money
}
class Money implements Expression {
private _amount: number
private _currency: string
function createReportData(readList, recommendList) {
const reportData = {};
reportData.userName = readList.name;
reportData.readBooks = readList.books
.map(book => {
return {...book, point: point(book)};
});
reportData.total = total(reportData);
return reportData;
const createReportData = require('./createReportData');
function generateReadReport(readList, recommendList) {
const reportData = createReportData(readList, recommendList);
return renderPlainText(reportData);
}
function renderPlainText(reportData) {
let report = `name: ${reportData.userName}\n`;
report += '-----\n';
@haru01
haru01 / 18.js
Last active April 4, 2019 01:54
function generateReadReport(readList, recommendList) {
const reportData = createReportData(readList, recommendList);
return renderPlainText(reportData);
}
function createReportData(readList, recommendList) {
const reportData = {};
reportData.userName = readList.name;
reportData.readBooks = readList.books
.map(book => {