\documentclass[10pt,a4paper]{article} % Packages \usepackage{fancyhdr} % For header and footer \usepackage{multicol} % Allows multicols in tables \usepackage{tabularx} % Intelligent column widths \usepackage{tabulary} % Used in header and footer \usepackage{hhline} % Border under tables \usepackage{graphicx} % For images \usepackage{xcolor} % For hex colours %\usepackage[utf8x]{inputenc} % For unicode character support \usepackage[T1]{fontenc} % Without this we get weird character replacements \usepackage{colortbl} % For coloured tables \usepackage{setspace} % For line height \usepackage{lastpage} % Needed for total page number \usepackage{seqsplit} % Splits long words. %\usepackage{opensans} % Can't make this work so far. Shame. Would be lovely. \usepackage[normalem]{ulem} % For underlining links % Most of the following are not required for the majority % of cheat sheets but are needed for some symbol support. \usepackage{amsmath} % Symbols \usepackage{MnSymbol} % Symbols \usepackage{wasysym} % Symbols %\usepackage[english,german,french,spanish,italian]{babel} % Languages % Document Info \author{{[}deleted{]}} \pdfinfo{ /Title (writing-packages.pdf) /Creator (Cheatography) /Author ({[}deleted{]}) /Subject (Writing packages Cheat Sheet) } % Lengths and widths \addtolength{\textwidth}{6cm} \addtolength{\textheight}{-1cm} \addtolength{\hoffset}{-3cm} \addtolength{\voffset}{-2cm} \setlength{\tabcolsep}{0.2cm} % Space between columns \setlength{\headsep}{-12pt} % Reduce space between header and content \setlength{\headheight}{85pt} % If less, LaTeX automatically increases it \renewcommand{\footrulewidth}{0pt} % Remove footer line \renewcommand{\headrulewidth}{0pt} % Remove header line \renewcommand{\seqinsert}{\ifmmode\allowbreak\else\-\fi} % Hyphens in seqsplit % This two commands together give roughly % the right line height in the tables \renewcommand{\arraystretch}{1.3} \onehalfspacing % Commands \newcommand{\SetRowColor}[1]{\noalign{\gdef\RowColorName{#1}}\rowcolor{\RowColorName}} % Shortcut for row colour \newcommand{\mymulticolumn}[3]{\multicolumn{#1}{>{\columncolor{\RowColorName}}#2}{#3}} % For coloured multi-cols \newcolumntype{x}[1]{>{\raggedright}p{#1}} % New column types for ragged-right paragraph columns \newcommand{\tn}{\tabularnewline} % Required as custom column type in use % Font and Colours \definecolor{HeadBackground}{HTML}{333333} \definecolor{FootBackground}{HTML}{666666} \definecolor{TextColor}{HTML}{333333} \definecolor{DarkBackground}{HTML}{A3A3A3} \definecolor{LightBackground}{HTML}{F3F3F3} \renewcommand{\familydefault}{\sfdefault} \color{TextColor} % Header and Footer \pagestyle{fancy} \fancyhead{} % Set header to blank \fancyfoot{} % Set footer to blank \fancyhead[L]{ \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{C} \SetRowColor{DarkBackground} \vspace{-7pt} {\parbox{\dimexpr\textwidth-2\fboxsep\relax}{\noindent \hspace*{-6pt}\includegraphics[width=5.8cm]{/web/www.cheatography.com/public/images/cheatography_logo.pdf}} } \end{tabulary} \columnbreak \begin{tabulary}{11cm}{L} \vspace{-2pt}\large{\bf{\textcolor{DarkBackground}{\textrm{Writing packages Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{{[}deleted{]}} via \textcolor{DarkBackground}{\uline{cheatography.com/29211/cs/8585/}}} \end{tabulary} \end{multicols}} \fancyfoot[L]{ \footnotesize \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{LL} \SetRowColor{FootBackground} \mymulticolumn{2}{p{5.377cm}}{\bf\textcolor{white}{Cheatographer}} \\ \vspace{-2pt}{[}deleted{]} \\ \uline{cheatography.com/deleted-29211} \\ \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Not Yet Published.\\ Updated 11th July, 2016.\\ Page {\thepage} of \pageref{LastPage}. \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Sponsor}} \\ \SetRowColor{white} \vspace{-5pt} %\includegraphics[width=48px,height=48px]{dave.jpeg} Measure your website readability!\\ www.readability-score.com \end{tabulary} \end{multicols}} \begin{document} \raggedright \raggedcolumns % Set font size to small. Switch to any value % from this page to resize cheat sheet text: % www.emerson.emory.edu/services/latex/latex_169.html \footnotesize % Small font. \begin{tabularx}{17.67cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{17.67cm}}{\bf\textcolor{white}{Testing Why}} \tn \SetRowColor{white} \mymulticolumn{1}{x{17.67cm}}{Reliability: \newline % Row Count 1 (+ 1) In a web application (not a web site), there are multiple dependencies on any given package or control. This means that simply verifying a control works as intended in one spot in the application is relatively sketchy assurance that it works, especially if making changes when it is already in use. \newline % Row Count 7 (+ 6) Collaboration: \newline % Row Count 8 (+ 1) Write tests against the behaviors you want a package to have. When someone else changes the behavior, they then know they have broken something that was required for a reason. \newline % Row Count 12 (+ 4) Regression: \newline % Row Count 13 (+ 1) Something is broken, write a failing test, fix the test, it will never surprise you again.% Row Count 15 (+ 2) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{17.67cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{17.67cm}}{\bf\textcolor{white}{Testing When}} \tn \SetRowColor{white} \mymulticolumn{1}{x{17.67cm}}{Anytime the public facing behavior of a package changes. \newline % Row Count 2 (+ 2) Anytime the internal workings of a package change and your code is riddled with hacks that care about them, or you have poorly written tests that care about them. \newline % Row Count 6 (+ 4) Don't get hung up on test-first coding. It would make a well-designed release much more estimable and consistent. But with a typical \seqsplit{prototype-becomes-the-package}, design as you go approach, re-writing tests before an initial public contract is finished can be a waste of time.% Row Count 12 (+ 6) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{17.67cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{17.67cm}}{\bf\textcolor{white}{Testing How}} \tn \SetRowColor{white} \mymulticolumn{1}{x{17.67cm}}{Enumerate and describe all of the public behaviors of your package. \newline % Row Count 2 (+ 2) Compromises: \newline % Row Count 3 (+ 1) Actual unit testing (stubbing out all services) results in sturdy tests that don't need to be re-written when dependencies change. This results in a huge future payoff in reliability and avoiding a cycle where code changes always necessitate test changes (which is what test writing seems to be commonly perceived as). \newline % Row Count 10 (+ 7) In a time crunched situation it is possible to best-guess which services will actually change, and write integration or partial integration tests, but they should be marked as such, because it is essentially creating ongoing technical debt for whichever project they are placed in. {\bf{It should not be more than a few minutes faster to write a throwaway test vs an actual unit test because there should be no need to create plumbing for any properly designed packages (thanks to sinonjs, systemjs, and the windsor test npm package).}}% Row Count 21 (+ 11) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{17.67cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{17.67cm}}{\bf\textcolor{white}{With}} \tn \SetRowColor{white} \mymulticolumn{1}{x{17.67cm}}{test-js.git gets installed into the npm test command on the yeoman template automatically. The {\bf{npm test}} command looks up and runs tests in the {\bf{lib}} directory. Tests are denoted as: \newline % Row Count 4 (+ 4) file{\bf{.spec.js}} - Loaded with System.import, tested in node and browsers (allows es6) \newline % Row Count 6 (+ 2) file{\bf{.web.spec.js}} - Loaded with System.import, tested in browsers (allows es6) \newline % Row Count 8 (+ 2) file{\bf{.node.spec.js}} - Loaded with node's require(), tested in node (does not allow es6)% Row Count 10 (+ 2) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \end{document}