-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtutorial-27-suman-best-practices.html
executable file
·111 lines (80 loc) · 6.25 KB
/
tutorial-27-suman-best-practices.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JSDoc: Tutorial: Best practices with Suman</title>
<script src="scripts/prettify/prettify.js"> </script>
<script src="scripts/prettify/lang-css.js"> </script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<div id="main">
<h1 class="page-title">Tutorial: Best practices with Suman</h1>
<section>
<header>
<h2>Best practices with Suman</h2>
</header>
<article>
<h2>Concurrency within a single test suite</h2><p>For the purposes of speed, ideally your test cases can run in parallel/interleave.
However, if they are interleaving, they can both modify data in the shared scope and cause race conditions.
To avoid these types of race conditions, Suman provides features to pass data (hopefully immutable) directly
between test cases and beforeEach/afterEach hooks (in both directions)</p>
<p>Please learn about the purposes of t.data and t.value, the below is an illustration:</p>
<pre class="prettyprint source"><code> // this is very bad!!
var value = 3;
this.beforeEach(t => {
value++;
});
this.it('is 4', t => {
assert.equal(value,4);
});
this.it('is 5', t => {
assert.equal(value,5);
});</code></pre><p>instead your should do this:</p>
<pre class="prettyprint source"><code> // this is much better
this.beforeEach(t => {
t.data.num = ++t.value;
});
this.it('is 4', {value: 5}, t => {
assert.equal(t.data.num, 6);
});
this.it('is 5', {value: 8}, t => {
assert.equal(t.data.num, 9);
});</code></pre><p>and even better is this, if you can follow:</p>
<pre class="prettyprint source"><code> // this is even better
this.beforeEach(t => {
t.data.num = ++t.value;
});
this.it('is six', {value: 5}, t => {
assert.equal(t.data.num, t.value + 1);
});
this.it('is nine', {value: 8}, t => {
assert.equal(t.data.num, t.value + 1);
});</code></pre><h2>Transpilation</h2><p>If you are running an individual test file, and you are in the process of developing or debugging the test, you can and should use
babel-node, which is available with the suman-babel command.</p>
<p>If you are running a group of tests and want to transpile first, then you should turn this into a
gulp task or makefile task.</p>
<h2>Organization</h2><p>We highly recommend having all your tests stick to a naming convention</p>
<p>for example, a suman test should always end with <code>".test.js"</code>.</p>
<p>that way, when use Make or Gulp etc, you can use</p>
<p><code>TESTS=$(shell find test/ -name "*.test.js")</code></p>
<p>in this way, you can distinguish which files to run, and the Suman
runner will never run a non-Suman test file.</p>
</article>
</section>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Tutorials</h3><ul><li><a href="tutorial-00-about.html">About Suman</a></li><li><a href="tutorial-01-getting-started.html">Getting Started with Suman</a></li><li><a href="tutorial-02-simple-examples.html">Simple Examples</a></li><li><a href="tutorial-03-high-level-overview.html">Higher Level Overview</a></li><li><a href="tutorial-04-command-line-options.html">Command line options</a></li><li><a href="tutorial-05-advanced-use.html">Advanced Use</a></li><li><a href="tutorial-06-suman-config-file.html">06-suman-config-file</a></li><li><a href="tutorial-07-suman-patterns-and-recipes.html">Suman Patterns and Recipes</a></li><li><a href="tutorial-08-suman-anti-patterns.html">Suman Anti-Patterns</a></li><li><a href="tutorial-09-suman-reporters.html">Suman reporters and creating custom reporters</a></li><li><a href="tutorial-10-dependency-injection.html">10-dependency-injection</a></li><li><a href="tutorial-11-advanced-installation.html">Advanced installation of Suman</a></li><li><a href="tutorial-12-using-suman-with-babel.html">Using Suman with Babel</a></li><li><a href="tutorial-13-test-dir-organization.html">How to organize your test directory</a></li><li><a href="tutorial-14-debugging-suman.html">How to debug Suman tests</a></li><li><a href="tutorial-15-testing-child-processes-with-suman.html">Testing and debugging processes that spawn child processes</a></li><li><a href="tutorial-16-using-spies-with-suman.html">Using test spies with Suman</a></li><li><a href="tutorial-17-suman-server-and-web-reporter.html">About Suman server and built-in web reporter</a></li><li><a href="tutorial-18-tips-and-tricks.html">Tips and tricks</a></li><li><a href="tutorial-19-converting-from-mocha.html">Converting from Mocha to Suman</a></li><li><a href="tutorial-21-running-suman-against-shell-scripts.html">21-running-suman-against-shell-scripts</a></li><li><a href="tutorial-22-case-studies.html">22-case-studies</a></li><li><a href="tutorial-22-programmatic-usage-and-macros.html">22-programmatic-usage-and-macros</a></li><li><a href="tutorial-27-suman-best-practices.html">Best practices with Suman</a></li><li><a href="tutorial-30-anatomy-of-suman-suite.html">Anatomy of Suman Test Suites</a></li><li><a href="tutorial-31-workflows-with-suman.html">Workflows with Suman => Watchers and transpilation</a></li><li><a href="tutorial-40-integrating-with-ci-cd.html">Integrating with CI/CD</a></li><li><a href="tutorial-41-suman-exit-codes.html">List of Suman exit codes</a></li><li><a href="tutorial-42-hidden-secret-features.html">Some secret / hidden features of Suman</a></li><li><a href="tutorial-50-suman-parallelism.html">Complete explanation of Suman parallelism</a></li><li><a href="tutorial-70-usage-with-code-coverage-tools.html">Usage with code coverage tools (namely Istanbul)</a></li><li><a href="tutorial-90-roadmap.html">Suman roadmap and upcoming efforts</a></li><li><a href="tutorial-99-faq.html">FAQ</a></li><li><a href="tutorial-advanced-parallelization-2.html">advanced-parallelization-2</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a> on Wed Feb 08 2017 22:39:23 GMT-0800 (PST)
</footer>
<script> prettyPrint(); </script>
<script src="scripts/linenumber.js"> </script>
</body>
</html>