Money. Шаг2.

2012.07.11 23:14

Пытаюсь использовать TDD во всех проектах, где это возможно, чтобы побыстрее освоить технологию. Но полностью соотоветсвует методике, только проект по учету линчых финансов, о котором я пишу на этих страницах.

Итак, пожелание, над который я тружусь в настоящее время звучит так:

Как пользователь, я хочу добавлять новые счета, чтобы получить их полный список

В настоящий момент создан класс Account, который обладает некоторым набором атрибутов. Очевидно, что их потребуется менять, так что этим и займусь. Так как в проекте будет использована библиотека knockoutjs, буду писать тест сразу с учетом этого факта.

  1. a.name('New Name');
  2. equal(a.name(), 'New Name', "Change account name");

Я обращаюсь к свойству name, как к функции, так как предполагаю, что это будет observable-элемент. После подключения плагина mapping для knockout класс Account принял вот такой вид

  1. function Account(data)
  2. {
  3. var self = this;
  4. var defs =
  5. {
  6. name: 'Новый счет',
  7. note: '',
  8. amount: 0.0,
  9. currency:'RUR'
  10. };
  11. $.extend(defs, data);
  12.  
  13. ko.mapping.fromJS(defs, {}, self);
  14. self.id = getKey();
  15. }

Здесь я немного отступил от TDD и добавил в конструктор класса параметр data, который может установить начальное состояние объекта использовав для этого переданный JS-объект. Теперь напишу недостающие тесты. Это же Agile development, который должен быть гибок во всем, даже в соблюдении процесса.

Теперь эта часть теста выглядит вот так (deepEqual используется для рекурсивного сравнения объектов)

  1. var t = {name: 'New Name', note: 'New Note', amount: 23.52, currency: 'USD'};
  2. a.name(t.name);
  3. equal(a.name(), t.name, "Change account name");
  4. a.note(t.note);
  5. a.amount(t.amount);
  6. a.currency(t.currency);
  7. deepEqual(ko.mapping.toJS(a), t, 'Change all fields');
  8.  
  9. var b = new Account(t);
  10. deepEqual(ko.mapping.toJS(b), t, 'Create account based on JS object');

Когда класс в минимальной комплектации готов, можно приступить к интерфейсу. Согласно постулатам XP надо нарезать пирог, а не делить его на слои. Как пользователь я хочу, как можно скорее, увидеть ощутимые результаты, а не сухую констатацию факта, что успешно пройдены 14 тестов из 14. Лишь слипающиеся глаза говорят о том, что следующий тест я буду писать уже не сегодня.

Читайте в блоге

Money 1st. Онлайн программирование.

Комментарии:

Войдите на сайт, чтобы оставить комментарий