Skip to Content

Мокирование в приложениях web mvc

Другие статьи по юнит-тестированию:

Проекты с примерами из статьи:

Зачем нужны моки
Юнит-тестирование класса, работа которого не зависит от поведения других классов — несложная задача. Мы можем написать что-то вроде:

assertEquals(4, calculator.add(2, 2));

Но приложение web mvc, как правило, состоит из нескольких независимых слоев:
Архитектура MVC-приложения

Читать далее

AbstractCalendar.JS. Когда нужно больше, чем Datepicker

В некоторых проектах возникает необходимость разработать календарь с необычным функционалом или дизайном. Чтобы сделать это, можно использовать готовые компоненты (например, jQuery UI Datepicker), либо писать код календаря с нуля. Для упрощения такой задачи можно использовать утилиту AbstractCalendar.JS.

Читать далее

Автоответчик в Gmail, Яндекс.Почта и Mail.ru

Современные почтовые веб-клиенты предоставляют обширные возможности автоматической обработки входящей почты. Одной из таких возможностей электронной почты является автоответчик. В данной статье мы расскажем как сделать автоответчик на все входящие письма и для конкретных адресов в трех самых популярных почтовых веб-клиентах: Google mail (Gmail), Яндекс.почта (Yandex) и Mail.ru.

Gmail

Автоматические ответы на все входящие письма
Автоматические ответы на входящие письма от конкретных адресатов
Полезно знать

Яндекс.Почта

Автоматические ответы на все входящие письма
Автоматические ответы на входящие письма от конкретных адресатов
Полезно знать

Mail.ru

Автоматические ответы на все входящие письма
Автоматические ответы на входящие письма от конкретных адресатов
Полезно знать

Читать далее

Ускорение приложений Angular с помощью ручной генерации HTML-кода

angularjs_logo-svg

Другие статьи по AngularJS:

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

Существует не совсем изящный, но действенный (и иногда единственный) способ ускорения отрисовки интерфейса в таких ситуациях. Это переписывание подобных блоков с использованием ручного построения DOM.

Этот способ не всегда одинаково хорошо ускоряет отрисовку. Его эффективность зависит от особенностей шаблона, который отрисовывается с задержками. В этой статье описано, в каких случаях этот способ даёт наилучшие результаты, а также, какие у него есть альтернативы (например, использование шаблонизатора jQote2), и приведено сравнительное время отрисовки вёрстки разными способами на различных примерах.

Читать далее

Как быстро построить круговую диаграмму на CSS и JavaScript

Для front-end разработчика существует огромное количество способов, которыми можно построить круговую диаграмму —  разнообразные библиотеки, плагины, потрясающие возможности SVG графики и т.д. Однако стоит, пожалуй, рассмотреть и самый простой способ создания «пирожкового» чарта, который может быть полезен, когда задача поставлена максимально просто и нет необходимости или возможности использовать дополнительные инструменты. Далее речь пойдёт о примере такой реализации.

Читать далее

Бизнес-аналитик, системный аналитик: в чем разница?

Продолжаем рассуждать на тему такой важной в IT профессии как аналитик. В нашем блоге уже есть статья «Аналитик в IT — кем быть?»; постараемся ее дополнить и осветить некоторые новые аспекты данной темы.

Итак, бизнес-аналитик и системный аналитик в IT — в чем разница между этими терминами? Это роли или должности? Может ли один человек их совмещать? В чем разница между плохим и хорошим аналитиком?

Читать далее

Логирование запросов Mondrian (в том числе в JasperServer)

Логирование запросов в Mondrian

Mondrian преобразует MDX-запросы в SQL. Если во время отладки стоит целью проверить правильно ли строится запрос, то самым быстрым решением будет включить логирование MDX- и SQL- запросов в самом mondrian.

Читать далее

Проксирование вызовов функций без побочных эффектов в JavaScript

Иногда требуется изменить поведение библиотечного объекта. К примеру, мы хотим, чтобы даты, которые мы получаем с сервера в формате ISO, выводились в интерфейсе в определенном формате. Хорошей идеей будет инкапсулировать эту логику, чтобы каждый раз не заглядывать в таблицу форматов и не писать moment().format('DD.MM.YYYY'). Во первых, тут правильно будет включить локаль moment.locale('ru') , но даже в этом случае нужно будет писать moment().format('L'). Естественно, форматов вывода в проекте будет много. Мне не нравится так называемый паттерн «хелпер», потому что он рано или поздно превратится в свалку всего и вся с кучей зависимостей. Мы сделаем обертку, но не простую, а в точности повторяющую API moment.js и добавляющую в него свои фишки. Делается это просто:  (надеюсь, вы используете underscore?)

App.moment = _.wrap(moment, function (moment) {
    var internalMoment = moment.apply(window, _.toArray(arguments).slice(1));
    internalMoment.formatLocal = _.partial(internalMoment.format, 'L');
    return internalMoment;
});

Вуаля. Теперь можно делать так:

var formatted = App.moment('2005-08-09T18:31:42').formatLocal();
console.log(formatted); // 09.08.2005

Как это работает

Сам moment является фабричным методом, который создает объект даты (но не типа Date, а собственный). Метод _.wrap создает новую функцию, в которой первым аргументом является оборачиваемая функция. Это позволяет нам писать код либо до, либо после ее собственного вызова. Таким образом сначала создается нормальный объект moment, а потом он расширяется. _.toArray(arguments).slice(1)  нужно для того, чтобы пользователь мог работать с методом, как если бы он работал с ним без обертки, мы просто выкидываем лишний аргумент, а остальные передаются моменту. Кстати, о методе _.partial. В нашем примере он создает новый метод formatLocale, замыкая в нем параметр ‘L’ и вызывая стандартный метод format. То есть, вызов App.moment().formatLocal()  эквивалентен moment().format(‘L’. Это называется частичное применение.

Генерация паролей для ASP.NET Membership

Для аутентификации пользователей и хранения пользовательских данных на проектах .NET часто используется технология ASP.NET Membership. Наконец, дошли руки до написания утилиты для хэширования паролей.

На данный момент утилита может хэшировать только по алгоритму HMAC SHA256 (этот алгоритм используется в SimpleMembershipProvider). В планах SqlMembershipProvider.

Скачать установщик можно с Sourceforge.
Репозиторий проекта на Github.

Однотипные операции с большим количеством строк в Sublime Text

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

В данных примерах мы рассмотрим многострочное выделение и выполнение однотипных операций в редакторе Sublime Text. Для выделения нескольких строк используются клавиатурные сокращения:
Windows: Ctrl+Alt+↑↓
Linux: Alt+Shift+↑↓

Пример № 1: Генерация unit-теста


Читать далее