Latest commit

History

15 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

node-training

Simple training in node using our set of tools.

###Step 0 - Running something in node.

Clone this repo, then run git checkout step-0
Run node app to execute the code in app.js.

node executes any javascript that will run on Google's V8 engine.

require

  • node's method of importing and exporting functionality and objects between files or modules.
  • node includes a set of built-in core modules. These can be "required" at any time.
  • node's module can be referenced at any time.
    • module.exports (alias exports) determines exactly what is returned when calling require on a file.
    • This can be an object, function, string, etc.
  • Calling require on a directory looks for a file called index.js at the root and gets its exports.
  • Require must use relative paths unless the module is a core module or is locted in the node_modules folder.

###Step 1 - Unit testing with mocha and chai Run git checkout step-1 -f
Run npm install. You should now have mocha and chai installed in your node_modules folder.

Our next goal is to move into some TDD/BDD with the tools we're using for this platform.

  1. Run npm test to see all our unit tests located in calculator.test.js fail.
  2. Open calculator.js and try to make the unit tests pass!
  3. Write unit tests for calculator.divide(), then make them pass.

mocha - Our unit test runner.
chai - Our assertion library.
Chai provides 3 diffeent assertion formats:

  • Assert
  • Expect
  • Should

We have decided to use the expect syntax in our platform, so stick to that.

###Step 2 - Mocking dependencies with sinon and proxyquire Run git checkout step-2 -f Run npm install. You should now have sinonjs and proxyquire.

proxyquire - lets us inject dependencies that our modules are using.
sinon - lets us mock and stub functionality.
sinon-chai - Chai assertions for sinon.

Here we're going to use our square.js file as a functionality to provide a square function to our calculator.
For step 2:

  1. In calculator.test.js, our calculator should not actually include the real square module. Use proxyquire for this.
  2. In calculator.test.js, our calculator should use sinon to create the stub for the square module function.

###Step 3 - Hosting in express. Run git checkout step-3 -f Run npm install express --save to grab express. This adds it to your package.json file as well as installs it.

express - Web application framework. Built on top of connect.
supertest - Allows integration testing of http servers including express apps.

####Asynchronous unit testing Open the newly created app.test.js. Notice the unit test functions now contain a parameter (done). This parameter is a callback function to tell mocha the unit test is complete. Use this any time you're unit testing asynchronous code.

###Step 4 - Swagger. Run git checkout step-4 -f Run npm start Navigate to localhost:1337/docs and check out swagger's ability to make API calls!

####Steps

  1. Open app.js. We now have express and our calculator.
  2. Create a new express app.
  3. Create a route in express to /calc that allows operations to be performed.
    • It should take a query string with the following parameters:
      1. op - add, multiple, divide, etc
      2. a - first operand
      3. b - second operand
    • Example query string: localhost:1337/calc?op=add&a=5&b=10
  4. Listen on port 1337.
  5. Start node to host!

####Notes To see the solution to any step 'n', do git checkout step-n-solved -f

###To-do

  1. Express body parser, middleware, etc
  2. nock
  3. promises A+ / q
  4. Jshint
  5. Istanbul code coverage

About

Simple training in node using our set of tools.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

15 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

node-training

Simple training in node using our set of tools.

###Step 0 - Running something in node.

Clone this repo, then run git checkout step-0
Run node app to execute the code in app.js.

node executes any javascript that will run on Google's V8 engine.

require

  • node's method of importing and exporting functionality and objects between files or modules.
  • node includes a set of built-in core modules. These can be "required" at any time.
  • node's module can be referenced at any time.
    • module.exports (alias exports) determines exactly what is returned when calling require on a file.
    • This can be an object, function, string, etc.
  • Calling require on a directory looks for a file called index.js at the root and gets its exports.
  • Require must use relative paths unless the module is a core module or is locted in the node_modules folder.

###Step 1 - Unit testing with mocha and chai Run git checkout step-1 -f
Run npm install. You should now have mocha and chai installed in your node_modules folder.

Our next goal is to move into some TDD/BDD with the tools we're using for this platform.

  1. Run npm test to see all our unit tests located in calculator.test.js fail.
  2. Open calculator.js and try to make the unit tests pass!
  3. Write unit tests for calculator.divide(), then make them pass.

mocha - Our unit test runner.
chai - Our assertion library.
Chai provides 3 diffeent assertion formats:

  • Assert
  • Expect
  • Should

We have decided to use the expect syntax in our platform, so stick to that.

###Step 2 - Mocking dependencies with sinon and proxyquire Run git checkout step-2 -f Run npm install. You should now have sinonjs and proxyquire.

proxyquire - lets us inject dependencies that our modules are using.
sinon - lets us mock and stub functionality.
sinon-chai - Chai assertions for sinon.

Here we're going to use our square.js file as a functionality to provide a square function to our calculator.
For step 2:

  1. In calculator.test.js, our calculator should not actually include the real square module. Use proxyquire for this.
  2. In calculator.test.js, our calculator should use sinon to create the stub for the square module function.

###Step 3 - Hosting in express. Run git checkout step-3 -f Run npm install express --save to grab express. This adds it to your package.json file as well as installs it.

express - Web application framework. Built on top of connect.
supertest - Allows integration testing of http servers including express apps.

####Asynchronous unit testing Open the newly created app.test.js. Notice the unit test functions now contain a parameter (done). This parameter is a callback function to tell mocha the unit test is complete. Use this any time you're unit testing asynchronous code.

###Step 4 - Swagger. Run git checkout step-4 -f Run npm start Navigate to localhost:1337/docs and check out swagger's ability to make API calls!

####Steps

  1. Open app.js. We now have express and our calculator.
  2. Create a new express app.
  3. Create a route in express to /calc that allows operations to be performed.
    • It should take a query string with the following parameters:
      1. op - add, multiple, divide, etc
      2. a - first operand
      3. b - second operand
    • Example query string: localhost:1337/calc?op=add&a=5&b=10
  4. Listen on port 1337.
  5. Start node to host!

####Notes To see the solution to any step 'n', do git checkout step-n-solved -f

###To-do

  1. Express body parser, middleware, etc
  2. nock
  3. promises A+ / q
  4. Jshint
  5. Istanbul code coverage

About

Simple training in node using our set of tools.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

15 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

node-training

Simple training in node using our set of tools.

###Step 0 - Running something in node.

Clone this repo, then run git checkout step-0
Run node app to execute the code in app.js.

node executes any javascript that will run on Google's V8 engine.

require

  • node's method of importing and exporting functionality and objects between files or modules.
  • node includes a set of built-in core modules. These can be "required" at any time.
  • node's module can be referenced at any time.
    • module.exports (alias exports) determines exactly what is returned when calling require on a file.
    • This can be an object, function, string, etc.
  • Calling require on a directory looks for a file called index.js at the root and gets its exports.
  • Require must use relative paths unless the module is a core module or is locted in the node_modules folder.

###Step 1 - Unit testing with mocha and chai Run git checkout step-1 -f
Run npm install. You should now have mocha and chai installed in your node_modules folder.

Our next goal is to move into some TDD/BDD with the tools we're using for this platform.

  1. Run npm test to see all our unit tests located in calculator.test.js fail.
  2. Open calculator.js and try to make the unit tests pass!
  3. Write unit tests for calculator.divide(), then make them pass.

mocha - Our unit test runner.
chai - Our assertion library.
Chai provides 3 diffeent assertion formats:

  • Assert
  • Expect
  • Should

We have decided to use the expect syntax in our platform, so stick to that.

###Step 2 - Mocking dependencies with sinon and proxyquire Run git checkout step-2 -f Run npm install. You should now have sinonjs and proxyquire.

proxyquire - lets us inject dependencies that our modules are using.
sinon - lets us mock and stub functionality.
sinon-chai - Chai assertions for sinon.

Here we're going to use our square.js file as a functionality to provide a square function to our calculator.
For step 2:

  1. In calculator.test.js, our calculator should not actually include the real square module. Use proxyquire for this.
  2. In calculator.test.js, our calculator should use sinon to create the stub for the square module function.

###Step 3 - Hosting in express. Run git checkout step-3 -f Run npm install express --save to grab express. This adds it to your package.json file as well as installs it.

express - Web application framework. Built on top of connect.
supertest - Allows integration testing of http servers including express apps.

####Asynchronous unit testing Open the newly created app.test.js. Notice the unit test functions now contain a parameter (done). This parameter is a callback function to tell mocha the unit test is complete. Use this any time you're unit testing asynchronous code.

###Step 4 - Swagger. Run git checkout step-4 -f Run npm start Navigate to localhost:1337/docs and check out swagger's ability to make API calls!

####Steps

  1. Open app.js. We now have express and our calculator.
  2. Create a new express app.
  3. Create a route in express to /calc that allows operations to be performed.
    • It should take a query string with the following parameters:
      1. op - add, multiple, divide, etc
      2. a - first operand
      3. b - second operand
    • Example query string: localhost:1337/calc?op=add&a=5&b=10
  4. Listen on port 1337.
  5. Start node to host!

####Notes To see the solution to any step 'n', do git checkout step-n-solved -f

###To-do

  1. Express body parser, middleware, etc
  2. nock
  3. promises A+ / q
  4. Jshint
  5. Istanbul code coverage

About

Simple training in node using our set of tools.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

15 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

node-training

Simple training in node using our set of tools.

###Step 0 - Running something in node.

Clone this repo, then run git checkout step-0
Run node app to execute the code in app.js.

node executes any javascript that will run on Google's V8 engine.

require

  • node's method of importing and exporting functionality and objects between files or modules.
  • node includes a set of built-in core modules. These can be "required" at any time.
  • node's module can be referenced at any time.
    • module.exports (alias exports) determines exactly what is returned when calling require on a file.
    • This can be an object, function, string, etc.
  • Calling require on a directory looks for a file called index.js at the root and gets its exports.
  • Require must use relative paths unless the module is a core module or is locted in the node_modules folder.

###Step 1 - Unit testing with mocha and chai Run git checkout step-1 -f
Run npm install. You should now have mocha and chai installed in your node_modules folder.

Our next goal is to move into some TDD/BDD with the tools we're using for this platform.

  1. Run npm test to see all our unit tests located in calculator.test.js fail.
  2. Open calculator.js and try to make the unit tests pass!
  3. Write unit tests for calculator.divide(), then make them pass.

mocha - Our unit test runner.
chai - Our assertion library.
Chai provides 3 diffeent assertion formats:

  • Assert
  • Expect
  • Should

We have decided to use the expect syntax in our platform, so stick to that.

###Step 2 - Mocking dependencies with sinon and proxyquire Run git checkout step-2 -f Run npm install. You should now have sinonjs and proxyquire.

proxyquire - lets us inject dependencies that our modules are using.
sinon - lets us mock and stub functionality.
sinon-chai - Chai assertions for sinon.

Here we're going to use our square.js file as a functionality to provide a square function to our calculator.
For step 2:

  1. In calculator.test.js, our calculator should not actually include the real square module. Use proxyquire for this.
  2. In calculator.test.js, our calculator should use sinon to create the stub for the square module function.

###Step 3 - Hosting in express. Run git checkout step-3 -f Run npm install express --save to grab express. This adds it to your package.json file as well as installs it.

express - Web application framework. Built on top of connect.
supertest - Allows integration testing of http servers including express apps.

####Asynchronous unit testing Open the newly created app.test.js. Notice the unit test functions now contain a parameter (done). This parameter is a callback function to tell mocha the unit test is complete. Use this any time you're unit testing asynchronous code.

###Step 4 - Swagger. Run git checkout step-4 -f Run npm start Navigate to localhost:1337/docs and check out swagger's ability to make API calls!

####Steps

  1. Open app.js. We now have express and our calculator.
  2. Create a new express app.
  3. Create a route in express to /calc that allows operations to be performed.
    • It should take a query string with the following parameters:
      1. op - add, multiple, divide, etc
      2. a - first operand
      3. b - second operand
    • Example query string: localhost:1337/calc?op=add&a=5&b=10
  4. Listen on port 1337.
  5. Start node to host!

####Notes To see the solution to any step 'n', do git checkout step-n-solved -f

###To-do

  1. Express body parser, middleware, etc
  2. nock
  3. promises A+ / q
  4. Jshint
  5. Istanbul code coverage

About

Simple training in node using our set of tools.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

15 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

node-training

Simple training in node using our set of tools.

###Step 0 - Running something in node.

Clone this repo, then run git checkout step-0
Run node app to execute the code in app.js.

node executes any javascript that will run on Google's V8 engine.

require

  • node's method of importing and exporting functionality and objects between files or modules.
  • node includes a set of built-in core modules. These can be "required" at any time.
  • node's module can be referenced at any time.
    • module.exports (alias exports) determines exactly what is returned when calling require on a file.
    • This can be an object, function, string, etc.
  • Calling require on a directory looks for a file called index.js at the root and gets its exports.
  • Require must use relative paths unless the module is a core module or is locted in the node_modules folder.

###Step 1 - Unit testing with mocha and chai Run git checkout step-1 -f
Run npm install. You should now have mocha and chai installed in your node_modules folder.

Our next goal is to move into some TDD/BDD with the tools we're using for this platform.

  1. Run npm test to see all our unit tests located in calculator.test.js fail.
  2. Open calculator.js and try to make the unit tests pass!
  3. Write unit tests for calculator.divide(), then make them pass.

mocha - Our unit test runner.
chai - Our assertion library.
Chai provides 3 diffeent assertion formats:

  • Assert
  • Expect
  • Should

We have decided to use the expect syntax in our platform, so stick to that.

###Step 2 - Mocking dependencies with sinon and proxyquire Run git checkout step-2 -f Run npm install. You should now have sinonjs and proxyquire.

proxyquire - lets us inject dependencies that our modules are using.
sinon - lets us mock and stub functionality.
sinon-chai - Chai assertions for sinon.

Here we're going to use our square.js file as a functionality to provide a square function to our calculator.
For step 2:

  1. In calculator.test.js, our calculator should not actually include the real square module. Use proxyquire for this.
  2. In calculator.test.js, our calculator should use sinon to create the stub for the square module function.

###Step 3 - Hosting in express. Run git checkout step-3 -f Run npm install express --save to grab express. This adds it to your package.json file as well as installs it.

express - Web application framework. Built on top of connect.
supertest - Allows integration testing of http servers including express apps.

####Asynchronous unit testing Open the newly created app.test.js. Notice the unit test functions now contain a parameter (done). This parameter is a callback function to tell mocha the unit test is complete. Use this any time you're unit testing asynchronous code.

###Step 4 - Swagger. Run git checkout step-4 -f Run npm start Navigate to localhost:1337/docs and check out swagger's ability to make API calls!

####Steps

  1. Open app.js. We now have express and our calculator.
  2. Create a new express app.
  3. Create a route in express to /calc that allows operations to be performed.
    • It should take a query string with the following parameters:
      1. op - add, multiple, divide, etc
      2. a - first operand
      3. b - second operand
    • Example query string: localhost:1337/calc?op=add&a=5&b=10
  4. Listen on port 1337.
  5. Start node to host!

####Notes To see the solution to any step 'n', do git checkout step-n-solved -f

###To-do

  1. Express body parser, middleware, etc
  2. nock
  3. promises A+ / q
  4. Jshint
  5. Istanbul code coverage

About

Simple training in node using our set of tools.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

15 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

node-training

Simple training in node using our set of tools.

###Step 0 - Running something in node.

Clone this repo, then run git checkout step-0
Run node app to execute the code in app.js.

node executes any javascript that will run on Google's V8 engine.

require

  • node's method of importing and exporting functionality and objects between files or modules.
  • node includes a set of built-in core modules. These can be "required" at any time.
  • node's module can be referenced at any time.
    • module.exports (alias exports) determines exactly what is returned when calling require on a file.
    • This can be an object, function, string, etc.
  • Calling require on a directory looks for a file called index.js at the root and gets its exports.
  • Require must use relative paths unless the module is a core module or is locted in the node_modules folder.

###Step 1 - Unit testing with mocha and chai Run git checkout step-1 -f
Run npm install. You should now have mocha and chai installed in your node_modules folder.

Our next goal is to move into some TDD/BDD with the tools we're using for this platform.

  1. Run npm test to see all our unit tests located in calculator.test.js fail.
  2. Open calculator.js and try to make the unit tests pass!
  3. Write unit tests for calculator.divide(), then make them pass.

mocha - Our unit test runner.
chai - Our assertion library.
Chai provides 3 diffeent assertion formats:

  • Assert
  • Expect
  • Should

We have decided to use the expect syntax in our platform, so stick to that.

###Step 2 - Mocking dependencies with sinon and proxyquire Run git checkout step-2 -f Run npm install. You should now have sinonjs and proxyquire.

proxyquire - lets us inject dependencies that our modules are using.
sinon - lets us mock and stub functionality.
sinon-chai - Chai assertions for sinon.

Here we're going to use our square.js file as a functionality to provide a square function to our calculator.
For step 2:

  1. In calculator.test.js, our calculator should not actually include the real square module. Use proxyquire for this.
  2. In calculator.test.js, our calculator should use sinon to create the stub for the square module function.

###Step 3 - Hosting in express. Run git checkout step-3 -f Run npm install express --save to grab express. This adds it to your package.json file as well as installs it.

express - Web application framework. Built on top of connect.
supertest - Allows integration testing of http servers including express apps.

####Asynchronous unit testing Open the newly created app.test.js. Notice the unit test functions now contain a parameter (done). This parameter is a callback function to tell mocha the unit test is complete. Use this any time you're unit testing asynchronous code.

###Step 4 - Swagger. Run git checkout step-4 -f Run npm start Navigate to localhost:1337/docs and check out swagger's ability to make API calls!

####Steps

  1. Open app.js. We now have express and our calculator.
  2. Create a new express app.
  3. Create a route in express to /calc that allows operations to be performed.
    • It should take a query string with the following parameters:
      1. op - add, multiple, divide, etc
      2. a - first operand
      3. b - second operand
    • Example query string: localhost:1337/calc?op=add&a=5&b=10
  4. Listen on port 1337.
  5. Start node to host!

####Notes To see the solution to any step 'n', do git checkout step-n-solved -f

###To-do

  1. Express body parser, middleware, etc
  2. nock
  3. promises A+ / q
  4. Jshint
  5. Istanbul code coverage

About

Simple training in node using our set of tools.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

15 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

node-training

Simple training in node using our set of tools.

###Step 0 - Running something in node.

Clone this repo, then run git checkout step-0
Run node app to execute the code in app.js.

node executes any javascript that will run on Google's V8 engine.

require

  • node's method of importing and exporting functionality and objects between files or modules.
  • node includes a set of built-in core modules. These can be "required" at any time.
  • node's module can be referenced at any time.
    • module.exports (alias exports) determines exactly what is returned when calling require on a file.
    • This can be an object, function, string, etc.
  • Calling require on a directory looks for a file called index.js at the root and gets its exports.
  • Require must use relative paths unless the module is a core module or is locted in the node_modules folder.

###Step 1 - Unit testing with mocha and chai Run git checkout step-1 -f
Run npm install. You should now have mocha and chai installed in your node_modules folder.

Our next goal is to move into some TDD/BDD with the tools we're using for this platform.

  1. Run npm test to see all our unit tests located in calculator.test.js fail.
  2. Open calculator.js and try to make the unit tests pass!
  3. Write unit tests for calculator.divide(), then make them pass.

mocha - Our unit test runner.
chai - Our assertion library.
Chai provides 3 diffeent assertion formats:

  • Assert
  • Expect
  • Should

We have decided to use the expect syntax in our platform, so stick to that.

###Step 2 - Mocking dependencies with sinon and proxyquire Run git checkout step-2 -f Run npm install. You should now have sinonjs and proxyquire.

proxyquire - lets us inject dependencies that our modules are using.
sinon - lets us mock and stub functionality.
sinon-chai - Chai assertions for sinon.

Here we're going to use our square.js file as a functionality to provide a square function to our calculator.
For step 2:

  1. In calculator.test.js, our calculator should not actually include the real square module. Use proxyquire for this.
  2. In calculator.test.js, our calculator should use sinon to create the stub for the square module function.

###Step 3 - Hosting in express. Run git checkout step-3 -f Run npm install express --save to grab express. This adds it to your package.json file as well as installs it.

express - Web application framework. Built on top of connect.
supertest - Allows integration testing of http servers including express apps.

####Asynchronous unit testing Open the newly created app.test.js. Notice the unit test functions now contain a parameter (done). This parameter is a callback function to tell mocha the unit test is complete. Use this any time you're unit testing asynchronous code.

###Step 4 - Swagger. Run git checkout step-4 -f Run npm start Navigate to localhost:1337/docs and check out swagger's ability to make API calls!

####Steps

  1. Open app.js. We now have express and our calculator.
  2. Create a new express app.
  3. Create a route in express to /calc that allows operations to be performed.
    • It should take a query string with the following parameters:
      1. op - add, multiple, divide, etc
      2. a - first operand
      3. b - second operand
    • Example query string: localhost:1337/calc?op=add&a=5&b=10
  4. Listen on port 1337.
  5. Start node to host!

####Notes To see the solution to any step 'n', do git checkout step-n-solved -f

###To-do

  1. Express body parser, middleware, etc
  2. nock
  3. promises A+ / q
  4. Jshint
  5. Istanbul code coverage

About

Simple training in node using our set of tools.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

15 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

node-training

Simple training in node using our set of tools.

###Step 0 - Running something in node.

Clone this repo, then run git checkout step-0
Run node app to execute the code in app.js.

node executes any javascript that will run on Google's V8 engine.

require

  • node's method of importing and exporting functionality and objects between files or modules.
  • node includes a set of built-in core modules. These can be "required" at any time.
  • node's module can be referenced at any time.
    • module.exports (alias exports) determines exactly what is returned when calling require on a file.
    • This can be an object, function, string, etc.
  • Calling require on a directory looks for a file called index.js at the root and gets its exports.
  • Require must use relative paths unless the module is a core module or is locted in the node_modules folder.

###Step 1 - Unit testing with mocha and chai Run git checkout step-1 -f
Run npm install. You should now have mocha and chai installed in your node_modules folder.

Our next goal is to move into some TDD/BDD with the tools we're using for this platform.

  1. Run npm test to see all our unit tests located in calculator.test.js fail.
  2. Open calculator.js and try to make the unit tests pass!
  3. Write unit tests for calculator.divide(), then make them pass.

mocha - Our unit test runner.
chai - Our assertion library.
Chai provides 3 diffeent assertion formats:

  • Assert
  • Expect
  • Should

We have decided to use the expect syntax in our platform, so stick to that.

###Step 2 - Mocking dependencies with sinon and proxyquire Run git checkout step-2 -f Run npm install. You should now have sinonjs and proxyquire.

proxyquire - lets us inject dependencies that our modules are using.
sinon - lets us mock and stub functionality.
sinon-chai - Chai assertions for sinon.

Here we're going to use our square.js file as a functionality to provide a square function to our calculator.
For step 2:

  1. In calculator.test.js, our calculator should not actually include the real square module. Use proxyquire for this.
  2. In calculator.test.js, our calculator should use sinon to create the stub for the square module function.

###Step 3 - Hosting in express. Run git checkout step-3 -f Run npm install express --save to grab express. This adds it to your package.json file as well as installs it.

express - Web application framework. Built on top of connect.
supertest - Allows integration testing of http servers including express apps.

####Asynchronous unit testing Open the newly created app.test.js. Notice the unit test functions now contain a parameter (done). This parameter is a callback function to tell mocha the unit test is complete. Use this any time you're unit testing asynchronous code.

###Step 4 - Swagger. Run git checkout step-4 -f Run npm start Navigate to localhost:1337/docs and check out swagger's ability to make API calls!

####Steps

  1. Open app.js. We now have express and our calculator.
  2. Create a new express app.
  3. Create a route in express to /calc that allows operations to be performed.
    • It should take a query string with the following parameters:
      1. op - add, multiple, divide, etc
      2. a - first operand
      3. b - second operand
    • Example query string: localhost:1337/calc?op=add&a=5&b=10
  4. Listen on port 1337.
  5. Start node to host!

####Notes To see the solution to any step 'n', do git checkout step-n-solved -f

###To-do

  1. Express body parser, middleware, etc
  2. nock
  3. promises A+ / q
  4. Jshint
  5. Istanbul code coverage

About

Simple training in node using our set of tools.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages