{"id":1350,"date":"2021-04-02T13:48:29","date_gmt":"2021-04-02T20:48:29","guid":{"rendered":"https:\/\/coderpad-staging.io\/?post_type=programming-language&#038;p=1073"},"modified":"2025-08-25T17:25:43","modified_gmt":"2025-08-26T00:25:43","slug":"coffeescript","status":"publish","type":"programming-language","link":"https:\/\/coderpad.io\/languages\/coffeescript\/","title":{"rendered":"CoffeeScript"},"content":{"rendered":"\n<p>CoffeeScript in CoderPad just runs on top of the JavaScript environment, the only difference being that we do not run CoffeeScript with the&nbsp;<code>--harmony<\/code>&nbsp;flag.<\/p>\n\n\n\n<p>We also have an array of interesting npm packages available for your use:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"http:\/\/underscorejs.org\/\" target=\"_blank\" rel=\"noopener\">underscore<\/a>&nbsp;and&nbsp;<a href=\"https:\/\/lodash.com\/\" target=\"_blank\" rel=\"noopener\">lodash<\/a>&nbsp;for many useful functional helpers. <\/li>\n\n\n\n<li><a href=\"https:\/\/www.npmjs.com\/package\/chai\" target=\"_blank\" rel=\"noopener\">chai<\/a>,&nbsp;<a href=\"https:\/\/www.npmjs.com\/package\/sinon\" target=\"_blank\" rel=\"noopener\">sinon<\/a>,&nbsp;<a href=\"https:\/\/www.npmjs.com\/package\/sinon-chai\" target=\"_blank\" rel=\"noopener\">sinon-chai<\/a>, and&nbsp;<a href=\"https:\/\/www.npmjs.com\/package\/mocha\" target=\"_blank\" rel=\"noopener\">mocha<\/a>&nbsp;testing libraries.<\/li>\n<\/ul>\n\n\n\n<p>Here\u2019s a quick example of how to use&nbsp;<code>sinon<\/code>&nbsp;and&nbsp;<code>chai<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CoffeeScript\" data-shcb-language-slug=\"coffeescript\"><span><code class=\"hljs language-coffeescript shcb-wrap-lines\">  chai = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'chai'<\/span>)\n  sinon = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'sinon'<\/span>)\n  sinonChai = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'sinon-chai'<\/span>)\n<span class=\"hljs-function\">\n  <span class=\"hljs-title\">hello<\/span> = <span class=\"hljs-params\">(name, cb)<\/span> -&gt;<\/span>\n    cb <span class=\"hljs-string\">'hello '<\/span> + name\n    <span class=\"hljs-keyword\">return<\/span>\n\n  chai.should()\n  chai.use sinonChai\n  cb = sinon.spy()\n  hello <span class=\"hljs-string\">'world'<\/span>, cb\n  cb.should.have.been.calledWith <span class=\"hljs-string\">'this test should fail'<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CoffeeScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">coffeescript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>as well as&nbsp;<code>mocha<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CoffeeScript\" data-shcb-language-slug=\"coffeescript\"><span><code class=\"hljs language-coffeescript shcb-wrap-lines\">  Mocha = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'mocha'<\/span>)\n  assert = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'assert'<\/span>)\n  mocha = <span class=\"hljs-keyword\">new<\/span> Mocha\n\n  <span class=\"hljs-comment\"># Bit of a hack, sorry!<\/span>\n  mocha.suite.emit <span class=\"hljs-string\">'pre-require'<\/span>, <span class=\"hljs-keyword\">this<\/span>, <span class=\"hljs-string\">'solution'<\/span>, mocha\n\n  describe <span class=\"hljs-string\">'Test suite'<\/span>, <span class=\"hljs-function\">-&gt;<\/span>\n    it <span class=\"hljs-string\">'should work'<\/span>, <span class=\"hljs-function\">-&gt;<\/span>\n      assert <span class=\"hljs-literal\">true<\/span>\n  mocha.run()\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CoffeeScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">coffeescript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>You can use <a href=\"https:\/\/www.npmjs.com\/package\/async\" target=\"_blank\" rel=\"noopener\">async<\/a>,&nbsp;<a href=\"https:\/\/www.npmjs.com\/package\/request\" target=\"_blank\" rel=\"noopener\">request<\/a>, and&nbsp;<a href=\"https:\/\/www.npmjs.com\/package\/isomorphic-fetch\" target=\"_blank\" rel=\"noopener\">isomorphic-fetch<\/a>&nbsp;for making async HTTP a little more convenient.<\/li>\n\n\n\n<li><a href=\"https:\/\/www.npmjs.com\/package\/q\" target=\"_blank\" rel=\"noopener\">q<\/a>&nbsp;and&nbsp;<a href=\"https:\/\/www.npmjs.com\/package\/bluebird\" target=\"_blank\" rel=\"noopener\">bluebird<\/a>&nbsp;are promise libraries to help make managing async in&nbsp;<em>general<\/em>&nbsp;easier.<\/li>\n\n\n\n<li><a href=\"https:\/\/www.npmjs.com\/package\/jsdom\" target=\"_blank\" rel=\"noopener\">jsdom<\/a>&nbsp;is a library for mimicking an HTML DOM within our JS environment. Useful if you want to manipulate elements without using our full HTML\/CSS\/JS environment.<\/li>\n<\/ul>\n","protected":false},"parent":0,"menu_order":0,"template":"","class_list":["post-1350","programming-language","type-programming-language","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/coderpad.io\/wp-json\/wp\/v2\/programming-language\/1350","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/coderpad.io\/wp-json\/wp\/v2\/programming-language"}],"about":[{"href":"https:\/\/coderpad.io\/wp-json\/wp\/v2\/types\/programming-language"}],"wp:attachment":[{"href":"https:\/\/coderpad.io\/wp-json\/wp\/v2\/media?parent=1350"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}