-
Notifications
You must be signed in to change notification settings - Fork 2
/
2-config-test.js.html
346 lines (280 loc) · 36.3 KB
/
2-config-test.js.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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html xmlns:yui="http://yuilibrary.com/rdf/1.0/yui.rdf#">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>test 2-config-test.js </title>
<link rel="stylesheet" type="text/css" href="assets/reset-fonts-grids-min.css?stamp=1365868537.05" />
<link rel="stylesheet" type="text/css" href="assets/api.css?stamp=1365868537.05" />
<script type="text/javascript" src="assets/api-js?stamp=1365868537.05"></script>
<script type="text/javascript" src="assets/ac-js?stamp=1365868537.05"></script>
</head>
<body id="node-monitor">
<div id="doc3" class="yui-t2">
<div id="hd">
<h1><a href="https://github.com/lorenwest/node-config" title="Node.js Configuration">Node.js Configuration</a></h1>
<a href="./index.html" title="Node.js Configuration">Node.js Configuration</a>
> <a href="./module_test.html" title="test">test</a>
> 2-config-test.js (source view)
<form onsubmit="return false">
<div id="propertysearch">
Search: <input autocomplete="off" id="searchinput" />
<div id="searchresults">
</div>
</div>
</form>
</div>
<div id="bd">
<div id="yui-main">
<div class="yui-b">
<form action="#" name="yui-classopts-form" method="get" id="yui-classopts-form">
<fieldset>
<legend>Filters</legend>
<span class="classopts" style="display:none;"><input type="checkbox" name="show_private" id="show_private" /> <label for="show_private">Show Private</label></span>
<span id="showProtected" class="classopts" style="display:none'"><input type="checkbox" name="show_protected" id="show_protected" /> <label for="show_protected">Show Protected</label></span>
<span class="classopts" style="display:none;"><input type="checkbox" name="show_deprecated" id="show_deprecated" /> <label for="show_deprecated">Show Deprecated</label></span>
</fieldset>
</form>
<div id="srcout">
<style>
#doc3 .classopts { display:none; }
</style>
<div class="highlight"><pre><span class="c1">// Hardcode $NODE_ENV=test for testing</span>
<span class="nx">process</span><span class="p">.</span><span class="nx">env</span><span class="p">.</span><span class="nx">NODE_ENV</span><span class="o">=</span><span class="s1">'test'</span><span class="p">;</span>
<span class="c1">// Test for environment variable overrides</span>
<span class="nx">process</span><span class="p">.</span><span class="nx">env</span><span class="p">.</span><span class="nx">CONFIG_EnvOverride_parm__1</span> <span class="o">=</span> <span class="s1">'overridden from test'</span><span class="p">;</span>
<span class="nx">process</span><span class="p">.</span><span class="nx">env</span><span class="p">.</span><span class="nx">CONFIG_EnvOverride_parm2</span> <span class="o">=</span> <span class="mi">13</span><span class="p">;</span>
<span class="c1">// Dependencies</span>
<span class="kd">var</span> <span class="nx">vows</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'vows'</span><span class="p">);</span>
<span class="nx">assert</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'assert'</span><span class="p">),</span>
<span class="nx">CONFIG</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'../lib/config'</span><span class="p">),</span>
<span class="nx">FileSystem</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'fs'</span><span class="p">),</span>
<span class="nx">originalWatchedValue</span> <span class="o">=</span> <span class="nx">CONFIG</span><span class="p">.</span><span class="nx">watchThisValue</span><span class="p">,</span>
<span class="nx">newWatchedValue</span> <span class="o">=</span> <span class="nb">Math</span><span class="p">.</span><span class="nx">floor</span><span class="p">(</span><span class="nb">Math</span><span class="p">.</span><span class="nx">random</span><span class="p">()</span> <span class="o">*</span> <span class="mi">100000</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">runtimeJsonFilename</span> <span class="o">=</span> <span class="nx">__dirname</span> <span class="o">+</span> <span class="s1">'/config/runtime.json'</span><span class="p">;</span>
<span class="cm">/**</span>
<span class="cm"> * <p>Unit tests for the node-config library. To run type:</p></span>
<span class="cm"> * <pre>npm test config</pre></span>
<span class="cm"> *</span>
<span class="cm"> * @class ConfigTest</span>
<span class="cm"> */</span>
<span class="nx">exports</span><span class="p">.</span><span class="nx">ConfigTest</span> <span class="o">=</span> <span class="nx">vows</span><span class="p">.</span><span class="nx">describe</span><span class="p">(</span><span class="s1">'Test suite for node-config'</span><span class="p">).</span><span class="nx">addBatch</span><span class="p">({</span>
<span class="s1">'Library initialization'</span><span class="o">:</span> <span class="p">{</span>
<span class="s1">'Config library is available'</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">isObject</span><span class="p">(</span><span class="nx">CONFIG</span><span class="p">);</span>
<span class="p">},</span>
<span class="s1">'Config extensions are included with the library'</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">isFunction</span><span class="p">(</span><span class="nx">CONFIG</span><span class="p">.</span><span class="nx">_cloneDeep</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">},</span>
<span class="s1">'Configuration file Tests'</span><span class="o">:</span> <span class="p">{</span>
<span class="nx">topic</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="k">return</span> <span class="nx">CONFIG</span><span class="p">;</span>
<span class="p">},</span>
<span class="s1">'Loading configurations from a JS module is correct'</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">equal</span><span class="p">(</span><span class="nx">CONFIG</span><span class="p">.</span><span class="nx">Customers</span><span class="p">.</span><span class="nx">dbHost</span><span class="p">,</span> <span class="s1">'base'</span><span class="p">);</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">equal</span><span class="p">(</span><span class="nx">CONFIG</span><span class="p">.</span><span class="nx">TestModule</span><span class="p">.</span><span class="nx">parm1</span><span class="p">,</span> <span class="s1">'value1'</span><span class="p">);</span>
<span class="p">},</span>
<span class="s1">'Loading configurations from a JSON file is correct'</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">equal</span><span class="p">(</span><span class="nx">CONFIG</span><span class="p">.</span><span class="nx">AnotherModule</span><span class="p">.</span><span class="nx">parm1</span><span class="p">,</span> <span class="s1">'value1'</span><span class="p">);</span>
<span class="p">},</span>
<span class="s1">'Loading configurations from a .yaml YAML file is correct'</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">equal</span><span class="p">(</span><span class="nx">CONFIG</span><span class="p">.</span><span class="nx">AnotherModule</span><span class="p">.</span><span class="nx">parm2</span><span class="p">,</span> <span class="s1">'value2'</span><span class="p">);</span>
<span class="p">},</span>
<span class="s1">'Loading configurations from a .yml YAML file is correct'</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">equal</span><span class="p">(</span><span class="nx">CONFIG</span><span class="p">.</span><span class="nx">AnotherModule</span><span class="p">.</span><span class="nx">parm2yml</span><span class="p">,</span> <span class="s1">'value2yml'</span><span class="p">);</span>
<span class="p">},</span>
<span class="s1">'Loading configurations from a Coffee-Script file is correct'</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">equal</span><span class="p">(</span><span class="nx">CONFIG</span><span class="p">.</span><span class="nx">AnotherModule</span><span class="p">.</span><span class="nx">parm3</span><span class="p">,</span> <span class="s1">'value3'</span><span class="p">);</span>
<span class="p">},</span>
<span class="s1">'Loading configurations from an environment file is correct'</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">equal</span><span class="p">(</span><span class="nx">CONFIG</span><span class="p">.</span><span class="nx">Customers</span><span class="p">.</span><span class="nx">dbPort</span><span class="p">,</span> <span class="s1">'5999'</span><span class="p">);</span>
<span class="p">},</span>
<span class="s1">'Loading configurations from the local file is correct'</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">equal</span><span class="p">(</span><span class="nx">CONFIG</span><span class="p">.</span><span class="nx">Customers</span><span class="p">.</span><span class="nx">dbPassword</span><span class="p">,</span> <span class="s1">'real password'</span><span class="p">);</span>
<span class="p">},</span>
<span class="s1">'Loading configurations from the local environment file is correct'</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">equal</span><span class="p">(</span><span class="nx">CONFIG</span><span class="p">.</span><span class="nx">Customers</span><span class="p">.</span><span class="nx">dbPassword2</span><span class="p">,</span> <span class="s1">'another password'</span><span class="p">);</span>
<span class="p">},</span>
<span class="s1">'Loading prior runtime.json configurations is correct'</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">equal</span><span class="p">(</span><span class="nx">CONFIG</span><span class="p">.</span><span class="nx">Customers</span><span class="p">.</span><span class="nx">dbName</span><span class="p">,</span> <span class="s1">'override_from_runtime_json'</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">},</span>
<span class="s1">'Configurations from environment variables'</span><span class="o">:</span> <span class="p">{</span>
<span class="nx">topic</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="k">return</span> <span class="nx">CONFIG</span><span class="p">;</span>
<span class="p">},</span>
<span class="s1">'Configuration can come from environment variables'</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">equal</span><span class="p">(</span><span class="nx">CONFIG</span><span class="p">.</span><span class="nx">EnvOverride</span><span class="p">.</span><span class="nx">parm2</span><span class="p">,</span> <span class="mi">13</span><span class="p">);</span>
<span class="p">},</span>
<span class="s1">'Double__underscores escape to single_underscores'</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">equal</span><span class="p">(</span><span class="nx">CONFIG</span><span class="p">.</span><span class="nx">EnvOverride</span><span class="p">.</span><span class="nx">parm_1</span><span class="p">,</span> <span class="s1">'overridden from test'</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">},</span>
<span class="s1">'Assuring a configuration property can be hidden'</span><span class="o">:</span> <span class="p">{</span>
<span class="nx">topic</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="kd">var</span> <span class="nx">object</span> <span class="o">=</span> <span class="p">{</span>
<span class="nx">item1</span><span class="o">:</span> <span class="mi">23</span><span class="p">,</span>
<span class="nx">subObject</span><span class="o">:</span> <span class="p">{</span>
<span class="nx">item2</span><span class="o">:</span> <span class="s2">"hello"</span>
<span class="p">}</span>
<span class="p">};</span>
<span class="k">return</span> <span class="nx">object</span><span class="p">;</span>
<span class="p">},</span>
<span class="s1">'The makeHidden() method is available'</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">isFunction</span><span class="p">(</span><span class="nx">CONFIG</span><span class="p">.</span><span class="nx">makeHidden</span><span class="p">);</span>
<span class="p">},</span>
<span class="s1">'The test object (before hiding) is correct'</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">object</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">isTrue</span><span class="p">(</span><span class="nx">JSON</span><span class="p">.</span><span class="nx">stringify</span><span class="p">(</span><span class="nx">object</span><span class="p">)</span> <span class="o">==</span> <span class="s1">'{"item1":23,"subObject":{"item2":"hello"}}'</span><span class="p">);</span>
<span class="p">},</span>
<span class="s1">'The test object (after hiding) is correct'</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">object</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">CONFIG</span><span class="p">.</span><span class="nx">makeHidden</span><span class="p">(</span><span class="nx">object</span><span class="p">,</span> <span class="s1">'item1'</span><span class="p">);</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">isTrue</span><span class="p">(</span><span class="nx">JSON</span><span class="p">.</span><span class="nx">stringify</span><span class="p">(</span><span class="nx">object</span><span class="p">)</span> <span class="o">==</span> <span class="s1">'{"subObject":{"item2":"hello"}}'</span><span class="p">);</span>
<span class="p">},</span>
<span class="s1">'The hidden property is readable, and has not changed'</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">object</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">isTrue</span><span class="p">(</span><span class="nx">JSON</span><span class="p">.</span><span class="nx">stringify</span><span class="p">(</span><span class="nx">object</span><span class="p">)</span> <span class="o">==</span> <span class="s1">'{"subObject":{"item2":"hello"}}'</span><span class="p">);</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">isTrue</span><span class="p">(</span><span class="nx">object</span><span class="p">.</span><span class="nx">item1</span> <span class="o">==</span> <span class="mi">23</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">},</span>
<span class="s1">'Assuring a configuration property can be made immutable'</span><span class="o">:</span> <span class="p">{</span>
<span class="nx">topic</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="nx">CONFIG</span><span class="p">.</span><span class="nx">makeImmutable</span><span class="p">(</span><span class="nx">CONFIG</span><span class="p">.</span><span class="nx">TestModule</span><span class="p">,</span> <span class="s1">'parm1'</span><span class="p">);</span>
<span class="nx">CONFIG</span><span class="p">.</span><span class="nx">TestModule</span><span class="p">.</span><span class="nx">parm1</span> <span class="o">=</span> <span class="s2">"setToThis"</span><span class="p">;</span>
<span class="k">return</span> <span class="nx">CONFIG</span><span class="p">.</span><span class="nx">TestModule</span><span class="p">.</span><span class="nx">parm1</span><span class="p">;</span>
<span class="p">},</span>
<span class="s1">'The makeImmutable() method is available'</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">isFunction</span><span class="p">(</span><span class="nx">CONFIG</span><span class="p">.</span><span class="nx">makeImmutable</span><span class="p">);</span>
<span class="p">},</span>
<span class="s1">'Correctly unable to change an immutable configuration'</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">value</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">isTrue</span><span class="p">(</span><span class="nx">value</span> <span class="o">!=</span> <span class="s2">"setToThis"</span><span class="p">);</span>
<span class="p">},</span>
<span class="s1">'Left the original value intact after attempting the change'</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">value</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">equal</span><span class="p">(</span><span class="nx">value</span><span class="p">,</span> <span class="s2">"value1"</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">},</span>
<span class="s1">'Configuration for module developers'</span><span class="o">:</span> <span class="p">{</span>
<span class="nx">topic</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="c1">// Set some parameters for the test module</span>
<span class="k">return</span> <span class="nx">CONFIG</span><span class="p">.</span><span class="nx">setModuleDefaults</span><span class="p">(</span><span class="s2">"TestModule"</span><span class="p">,</span> <span class="p">{</span>
<span class="nx">parm1</span><span class="o">:</span> <span class="mi">1000</span><span class="p">,</span> <span class="nx">parm2</span><span class="o">:</span> <span class="mi">2000</span><span class="p">,</span> <span class="nx">parm3</span><span class="o">:</span> <span class="mi">3000</span>
<span class="p">});</span>
<span class="p">},</span>
<span class="s1">'The setModuleDefaults() method is available'</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">isFunction</span><span class="p">(</span><span class="nx">CONFIG</span><span class="p">.</span><span class="nx">setModuleDefaults</span><span class="p">);</span>
<span class="p">},</span>
<span class="s1">'The module config is in the CONFIG object'</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">moduleConfig</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">isTrue</span><span class="p">(</span><span class="k">typeof</span><span class="p">(</span><span class="nx">CONFIG</span><span class="p">.</span><span class="nx">TestModule</span><span class="p">)</span> <span class="o">!=</span> <span class="s2">"undefined"</span><span class="p">);</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">deepEqual</span><span class="p">(</span><span class="nx">CONFIG</span><span class="p">.</span><span class="nx">TestModule</span><span class="p">,</span> <span class="nx">moduleConfig</span><span class="p">);</span>
<span class="p">},</span>
<span class="s1">'Local configurations are mixed in'</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">moduleConfig</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">equal</span><span class="p">(</span><span class="nx">moduleConfig</span><span class="p">.</span><span class="nx">parm1</span><span class="p">,</span> <span class="s2">"value1"</span><span class="p">);</span>
<span class="p">},</span>
<span class="s1">'Defaults remain intact unless overridden'</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">moduleConfig</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">equal</span><span class="p">(</span><span class="nx">moduleConfig</span><span class="p">.</span><span class="nx">parm2</span><span class="p">,</span> <span class="mi">2000</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">},</span>
<span class="s1">'Internal Change Notification Tests'</span><span class="o">:</span> <span class="p">{</span>
<span class="nx">topic</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="c1">// Attach this topic as a watcher</span>
<span class="kd">var</span> <span class="nx">cb</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">callback</span><span class="p">;</span>
<span class="nx">CONFIG</span><span class="p">.</span><span class="nx">watch</span><span class="p">(</span><span class="nx">CONFIG</span><span class="p">,</span> <span class="kc">null</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">obj</span><span class="p">,</span> <span class="nx">prop</span><span class="p">,</span> <span class="nx">oldValue</span><span class="p">,</span> <span class="nx">newValue</span><span class="p">){</span>
<span class="c1">// Don't process the submodule test - that's for later</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">prop</span> <span class="o">==</span> <span class="s1">'parm3'</span><span class="p">)</span> <span class="k">return</span><span class="p">;</span>
<span class="nx">cb</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span> <span class="p">{</span><span class="nx">obj</span><span class="o">:</span><span class="nx">obj</span><span class="p">,</span> <span class="nx">prop</span><span class="o">:</span><span class="nx">prop</span><span class="p">,</span> <span class="nx">oldValue</span><span class="o">:</span><span class="nx">oldValue</span><span class="p">,</span> <span class="nx">newValue</span><span class="o">:</span><span class="nx">newValue</span><span class="p">});</span>
<span class="p">});</span>
<span class="c1">// Write the new watched value out to the runtime.json file</span>
<span class="nx">CONFIG</span><span class="p">.</span><span class="nx">watchThisValue</span> <span class="o">=</span> <span class="nx">newWatchedValue</span><span class="p">;</span>
<span class="c1">// Test that submodule configurations are persisted</span>
<span class="nx">CONFIG</span><span class="p">.</span><span class="nx">TestModule</span><span class="p">.</span><span class="nx">parm3</span> <span class="o">=</span> <span class="mi">1234</span><span class="p">;</span>
<span class="p">},</span>
<span class="s1">'The watch() method is available'</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">isFunction</span><span class="p">(</span><span class="nx">CONFIG</span><span class="p">.</span><span class="nx">watch</span><span class="p">);</span>
<span class="p">},</span>
<span class="s1">'The change handler callback was fired'</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">obj</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">isTrue</span><span class="p">(</span><span class="kc">true</span><span class="p">);</span>
<span class="p">},</span>
<span class="s1">'And it was called on the correct object'</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">obj</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">isTrue</span><span class="p">(</span><span class="nx">obj</span><span class="p">.</span><span class="nx">obj</span> <span class="o">===</span> <span class="nx">CONFIG</span><span class="p">);</span>
<span class="p">},</span>
<span class="s1">'And it was called with the correct parameter'</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">obj</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">equal</span><span class="p">(</span><span class="nx">obj</span><span class="p">.</span><span class="nx">prop</span><span class="p">,</span> <span class="s1">'watchThisValue'</span><span class="p">);</span>
<span class="p">},</span>
<span class="s1">'And it has the correct prior value'</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">obj</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">equal</span><span class="p">(</span><span class="nx">obj</span><span class="p">.</span><span class="nx">oldValue</span><span class="p">,</span> <span class="nx">originalWatchedValue</span><span class="p">);</span>
<span class="p">},</span>
<span class="s1">'And it has the correct new value'</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">obj</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">equal</span><span class="p">(</span><span class="nx">obj</span><span class="p">.</span><span class="nx">newValue</span><span class="p">,</span> <span class="nx">newWatchedValue</span><span class="p">);</span>
<span class="p">},</span>
<span class="s1">'And the config value was correctly set'</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">obj</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">equal</span><span class="p">(</span><span class="nx">CONFIG</span><span class="p">.</span><span class="nx">watchThisValue</span><span class="p">,</span> <span class="nx">newWatchedValue</span><span class="p">);</span>
<span class="p">},</span>
<span class="s1">'Waiting for the O/S to notify us of changes...'</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">obj</span><span class="p">)</span> <span class="p">{</span>
<span class="c1">// This is just a message for the next test</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">isTrue</span><span class="p">(</span><span class="kc">true</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">},</span>
<span class="s1">'Runtime Configuration Changes are Persisted to runtime.json'</span><span class="o">:</span> <span class="p">{</span>
<span class="nx">topic</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="c1">// Watch the file for changes</span>
<span class="kd">var</span> <span class="nx">t</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span>
<span class="nx">FileSystem</span><span class="p">.</span><span class="nx">unwatchFile</span><span class="p">(</span><span class="nx">runtimeJsonFilename</span><span class="p">);</span>
<span class="nx">FileSystem</span><span class="p">.</span><span class="nx">watchFile</span><span class="p">(</span><span class="nx">runtimeJsonFilename</span><span class="p">,</span> <span class="p">{</span><span class="nx">persistent</span><span class="o">:</span><span class="kc">true</span><span class="p">},</span> <span class="kd">function</span><span class="p">(){</span>
<span class="nx">t</span><span class="p">.</span><span class="nx">callback</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span> <span class="nx">CONFIG</span><span class="p">.</span><span class="nx">_parseFile</span><span class="p">(</span><span class="nx">runtimeJsonFilename</span><span class="p">));</span>
<span class="p">});</span>
<span class="p">},</span>
<span class="s1">'The runtime.json file was changed'</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">runtimeObj</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">isTrue</span><span class="p">(</span><span class="o">!</span><span class="nx">err</span><span class="p">);</span>
<span class="p">},</span>
<span class="s1">'Prior configuration values were kept intact'</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">runtimeObj</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">equal</span><span class="p">(</span><span class="nx">runtimeObj</span><span class="p">.</span><span class="nx">Customers</span><span class="p">.</span><span class="nx">dbName</span><span class="p">,</span> <span class="s2">"override_from_runtime_json"</span><span class="p">);</span>
<span class="p">},</span>
<span class="s1">'Changed configuration values were persisted'</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">runtimeObj</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">equal</span><span class="p">(</span><span class="nx">runtimeObj</span><span class="p">.</span><span class="nx">watchThisValue</span><span class="p">,</span> <span class="nx">CONFIG</span><span class="p">.</span><span class="nx">watchThisValue</span><span class="p">);</span>
<span class="p">},</span>
<span class="s1">'Module default values are persisted'</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">runtimeObj</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">assert</span><span class="p">.</span><span class="nx">equal</span><span class="p">(</span><span class="nx">runtimeObj</span><span class="p">.</span><span class="nx">TestModule</span><span class="p">.</span><span class="nx">parm3</span><span class="p">,</span> <span class="mi">1234</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">});</span>
</pre></div>
</div>
</div>
</div>
<div class="yui-b">
<div class="nav">
<div id="moduleList" class="module">
<h4>Modules</h4>
<ul class="content">
<li class=""><a href="module_config.html" title="config">config</a></li>
<li class="selected"><a href="module_test.html" title="test">test</a></li>
</ul>
</div>
<div id="classList" class="module">
<h4>Classes</h4>
<ul class="content">
<li class=""><a href="ConfigTest.html" title="ConfigTest">ConfigTest</a></li>
<li class=""><a href="ProtectedTest.html" title="ProtectedTest">ProtectedTest</a></li>
</ul>
</div>
<div id="fileList" class="module">
<h4>Files</h4>
<ul class="content">
<li class=""><a href="1-protected-test.js.html" title="1-protected-test.js">1-protected-test.js</a></li>
<li class="selected"><a href="2-config-test.js.html" title="2-config-test.js">2-config-test.js</a></li>
<li class=""><a href="default.js.html" title="default.js">default.js</a></li>
</ul>
</div>
</div>
</div>
</div>
<div id="ft">
<hr />
Released on <a href="https://github.com/lorenwest/node-config">github</a> under the <a href="https://github.com/lorenwest/node-config/blob/master/LICENSE">Apache License 2.0</a>
<span class="subtitle">version 0.4.22</span>
</div>
</div>
<script type="text/javascript">
ALL_YUI_PROPS = [];
</script>
</body>
</html>