-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtutorial-42-hidden-secret-features.html
executable file
·112 lines (79 loc) · 6.24 KB
/
tutorial-42-hidden-secret-features.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
112
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JSDoc: Tutorial: Some secret / hidden features of 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: Some secret / hidden features of Suman</h1>
<section>
<header>
<h2>Some secret / hidden features of Suman</h2>
</header>
<article>
<p>Suman has some hidden/secret features that will be helpful to know about</p>
<p>Did you know that in callback mode, t is a function?</p>
<pre class="prettyprint source lang-js"><code>this.it.cb('whoa', t => {
assert.equal(typeof t,'function'); // true
assert(t instanceof Function); // true
});</code></pre><p>the reason for this is to support direct/automatic conversion from Mocha, so that you can still do things like:</p>
<pre class="prettyprint source"><code>
function helper(cb){
if(!condition){
cb(new Error('data is not defined');
}
else{
... do something else
}
});
this.it('whoa', helper);</code></pre><p>or more complexly:</p>
<pre class="prettyprint source lang-js"><code>
function helper(data, cb){
if(!data){
cb(new Error('data is not defined');
}
else{
... do something with data
}
});
this.it('whoa', helper.bind(this, 'some data'));</code></pre><p>or if you think .bind() is ugly and inexplicit like me, do it like so:</p>
<pre class="prettyprint source lang-js"><code>
function makeHelper(data){
return function helper(cb){
if(!data){
cb(new Error('data is not defined');
}
else{
... do something with data
}
});
}
this.it('whoa', makeHelper(data));</code></pre><p>as you can see <code>helper.bind(null, 'some data')</code> returns a new function that simple takes one argument => an error-first callback.
and it turns out that t is simply an error-first callback!</p>
<h2>Did you know, you can run all your tests in a single Node.js process <i> if you want </i>.</h2><p>use <code>export SUMAN_SINGLE_PROCESS=yes</code></p>
<h2>Did you know, you can force Suman to make everything run in parallel or series with these environment variables?</h2><pre class="prettyprint source"><code>export SUMAN_FORCE_SERIES=yes
export SUMAN_FORCE_PARALLEL=yes</code></pre><p>what these do is make all hooks and test cases run in series, or parallel, without you having to change your code. If your
code runs cleanly in parallel, that is a good sign.</p>
<h2>Did you know that you can give Suman an expected exit code, if you expect a test process to exit with an exit code other than 0?</h2>
</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>