<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Shubhendu Madhukar</title>
    <description>The latest articles on DEV Community by Shubhendu Madhukar (@shubhendumadhukar).</description>
    <link>https://dev.to/shubhendumadhukar</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F603573%2F7a1a4696-57f6-4160-af7a-be78f351fa9b.jpeg</url>
      <title>DEV Community: Shubhendu Madhukar</title>
      <link>https://dev.to/shubhendumadhukar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shubhendumadhukar"/>
    <language>en</language>
    <item>
      <title>File Based API Mocking in JavaScript</title>
      <dc:creator>Shubhendu Madhukar</dc:creator>
      <pubDate>Mon, 25 Oct 2021 07:49:28 +0000</pubDate>
      <link>https://dev.to/shubhendumadhukar/file-based-api-mocking-in-javascript-4fc6</link>
      <guid>https://dev.to/shubhendumadhukar/file-based-api-mocking-in-javascript-4fc6</guid>
      <description>&lt;p&gt;It's been a while, since I wrote about &lt;a href="https://github.com/testinggospels/camouflage"&gt;Camouflage&lt;/a&gt;. There have been some exciting developments in past few months and I would like to present the new features Camouflage has to offer to support your prototyping/testing needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Camouflage?
&lt;/h2&gt;

&lt;p&gt;For the uninitiated, Camouflage is a mocking tool, used to stub the backends based on various protocols, such as http, https, http2, grpc and websockets.&lt;/p&gt;

&lt;p&gt;Camouflage helps you carry out your front end prototyping, unit testing, functional/performance testing in silos, in absence of one or more Microservices/APIs. If you'd like to read more, visit my &lt;a href="https://dev.to/shubhendumadhukar/mocking-backends-with-camouflage-3j5n"&gt;previous post&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What's new in Camouflage?
&lt;/h2&gt;

&lt;p&gt;Some of the things I have been working on for past few months are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;A fully customizable caching mechanism.&lt;/em&gt; Compared to earlier versions where cache was stored only in memory, you can now use redis for caching.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Connection to external data sources&lt;/em&gt;. Most mocking tools rely on random data such as names, uuids, random numbers etc to make your response dynamic. But sometimes, that's not enough. Even though you are just building a mock, you might at times, need to connect to a real data source instead of just random data. Camouflage supported CSV files as data source in previous versions, but now you can also use postgres as your data source. (MySQL/Mongo to be supported soon)&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Containerization&lt;/em&gt;. Camouflage can now be deployed on docker environments, and kubernetes. Simply use the enclosed &lt;code&gt;docker-compose.yml&lt;/code&gt; and &lt;code&gt;kubernetes/*.yaml&lt;/code&gt; to quickly spin up a Camouflage environment&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Full list of features
&lt;/h2&gt;

&lt;p&gt;🔥 File based mocking support for HTTP, HTTPS, HTTP2, gRPC and websockets. 🔥&lt;/p&gt;

&lt;p&gt;⚡ Dynamic/realistic responses without having to write any code. ⚡&lt;/p&gt;

&lt;p&gt;🧩 Flexibility to partially or fully code your responses. 🧩&lt;/p&gt;

&lt;p&gt;🎯 Conditional responses based on request parameters. 🎯&lt;/p&gt;

&lt;p&gt;🌟 Inbuilt Caching - In memory and redis. 🌟&lt;/p&gt;

&lt;p&gt;🧮 Ability to fetch and condition the response using external data. Currently supported data sources are CSV and postgres. 🧮&lt;/p&gt;

&lt;p&gt;⏳ Delay Simulation. ⏳&lt;/p&gt;

&lt;p&gt;🔍 Inbuilt monitoring. 🔍&lt;/p&gt;

&lt;p&gt;🦺 Inbuilt backup and restore mechanism. 🦺&lt;/p&gt;

&lt;p&gt;⏩ Quick start with camouflage init and camouflage restore modules. ⏩&lt;/p&gt;

&lt;p&gt;🎊 Deployable on standalone VMs, Dockers and Kubernetes. 🎊&lt;/p&gt;

&lt;p&gt;📁 Comes with a file explorer UI that allows modification of mock files hosted remotely. 📁&lt;/p&gt;

&lt;h2&gt;
  
  
  What is in works?
&lt;/h2&gt;

&lt;p&gt;Camouflage is now reaching a stable state, which means a large part of effort would be focused on maintenance, resolving dependency vulnerability, cleaning up and commenting code, building an up-to-date JSDocs, supporting newer releases of Node (Camouflage can be run on systems with Node &amp;lt;v15).&lt;/p&gt;

&lt;p&gt;New functionalities on the road map are introducing few more data source compatibility, breaking down Camouflage from one large package to smaller modules that can be used as plugins, and eventually migrating from express to fastify.&lt;/p&gt;

&lt;p&gt;Check out the project @ &lt;a href="https://github.com/testinggospels/camouflage"&gt;Github&lt;/a&gt;. Leave a 🌟 if you'd like what you see, drop suggestions or ask questions, we'd love every bit of support we can get. To know all the details about Camouflage, refer to &lt;a href="https://testinggospels.github.io/camouflage/"&gt;documentation&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>opensource</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Mocking backends with Camouflage</title>
      <dc:creator>Shubhendu Madhukar</dc:creator>
      <pubDate>Fri, 23 Apr 2021 00:07:52 +0000</pubDate>
      <link>https://dev.to/shubhendumadhukar/mocking-backends-with-camouflage-3j5n</link>
      <guid>https://dev.to/shubhendumadhukar/mocking-backends-with-camouflage-3j5n</guid>
      <description>&lt;p&gt;In my &lt;a href="https://dev.to/shubhendumadhukar/how-to-mock-apis-in-seconds-28ia"&gt;previous post&lt;/a&gt; I introduced &lt;strong&gt;Camouflage&lt;/strong&gt; as a mocking tool for HTTP backends. After a number of feedbacks, numerous tests and code optimisations, documentation proof reading and much more, Camouflage is now on its way to a stable release, with lots of new bells and whistles.&lt;/p&gt;




&lt;h1&gt;
  
  
  What are mocks?
&lt;/h1&gt;

&lt;p&gt;Mocks or Stubs or Virtual Services, are replacements for your actual backend systems, which can be used for testing purposes in case your backend is unavailable. Mocks are great for several reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You are building a frontend application but your backend isn't ready yet. Use mocks to quickly create a virtual backend which provides you a dummy response and lets you test your frontend application without actually hitting a backend. Once your backend is ready just replace the mock server host with the actual server host in your configs and everything else remains the same. No more reading static responses from files.&lt;/li&gt;
&lt;li&gt;You can have similar use cases while running unit tests, functional tests or even performance tests, where as long as the virtual service can simulate the latency and provide a response similar to actual response, you don't need your complete backend and downstream to be ready for running tests in silos.&lt;/li&gt;
&lt;li&gt;Mocks are also great for debugging purposes, when you are testing multiple microservices together. Even with advanced monitoring tools, sometimes it's hard to pinpoint the exact cause of the issue. With mocks you can plug and play and debug which component is causing problems. And assess if rest of your application stack will work fine if the problematic component wasn't so…problematic.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  How do you create mocks?
&lt;/h1&gt;

&lt;p&gt;While there are a lot many tools available in open source world that allow you to create mocks, however in this article I'll discuss a new tool I have been working on. Camouflage.&lt;/p&gt;

&lt;p&gt;Camouflage works just as the name suggests. It allows you to create and use dummy backends. And your front end or dependant applications wouldn't be able to tell the difference if the response is coming from a mock or an actual API.&lt;/p&gt;

&lt;p&gt;Though Camouflage isn't an original idea in it's essence, it has a lot of cool features and enhancements over existing tools that help you get up and running within seconds. Few of the prominent features are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Camouflage has a near minimum learning curve.&lt;/strong&gt; Create a directory mocks/hello-world. Place a file named GET.mock containing your raw HTTP Response. And you are done. Make a GET request to /hello-world and you get your expected response. Make any changes to the content of your .mock file name and you get the new response without any downtime.&lt;/li&gt;
&lt;li&gt;Camouflage heavily uses handlebars, which enables you to add character to your response. Insert dynamic random values that change on each invocation, fetch data from incoming request and send out a conditional response, simulate delays and lot more.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Camouflage comes in two modes, functional and performance.&lt;/strong&gt; By default Camouflage runs in functional mode, which is sufficient for unit tests, frontend testing, even a small scale performance test. However if your machine has multiple CPUs and you are planning to run a performance test, why not make use of the full potential of your machine. You can use performance mode which lets Camouflage utilise multiple CPUs using node's cluster module.&lt;/li&gt;
&lt;li&gt;And finally, Camouflage supports multiple protocols, such as HTTP, HTTPS, HTTP2 and gRPC. More protocols are in development (i.e. TCP and SMTP)&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Enough talk. How do we create a mock?
&lt;/h1&gt;

&lt;p&gt;Well, you follow few simple steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install Camouflage as a global package using your favourite package manager
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; camouflage-server

Or,

yarn global add camouflage-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Create a mocks directory which will contain all your mocks. e.g. &lt;code&gt;~/mocks&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Create a config file. &lt;code&gt;config.yml&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;loglevel&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;info&lt;/span&gt;
&lt;span class="na"&gt;cpus&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="na"&gt;monitoring&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5555&lt;/span&gt;
&lt;span class="na"&gt;protocols&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;http&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;mocks_dir&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./mocks"&lt;/span&gt;
    &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8080&lt;/span&gt;
  &lt;span class="na"&gt;https&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;enable&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;false&lt;/span&gt;
    &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8443&lt;/span&gt;
    &lt;span class="na"&gt;cert&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./certs/server.cert"&lt;/span&gt;
    &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./certs/server.key"&lt;/span&gt;
  &lt;span class="na"&gt;http2&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;enable&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;false&lt;/span&gt;
    &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8081&lt;/span&gt;
    &lt;span class="na"&gt;cert&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./certs/server.cert"&lt;/span&gt;
    &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./certs/server.key"&lt;/span&gt;
  &lt;span class="na"&gt;grpc&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;enable&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;false&lt;/span&gt;
    &lt;span class="na"&gt;host&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;10.111.22.333"&lt;/span&gt;
    &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;4312&lt;/span&gt;
    &lt;span class="na"&gt;mocks_dir&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./grpc/mocks"&lt;/span&gt;
    &lt;span class="na"&gt;protos_dir&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./grpc/protos"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Start Camouflage: &lt;code&gt;camouflage --config config.yml&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Create another directory in the format your APIs basepath would be. For example: For an API &lt;code&gt;http://localhost:8080/hello/world&lt;/code&gt;, create directories as &lt;code&gt;~/mocks/hello/world&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Create a file ${HTTP_METHOD}.mock and insert your HTTP raw response. e.g &lt;code&gt;vi ~/mocks/hello/world/GET.mock&lt;/code&gt; and paste following content. (If you are on windows, simply use notepad.)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HTTP/1.1 200 OK
X-Custom-Header: Custom-Value
Content-Type: application/json
{
     "greeting": "Hey! It works!"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And you are done, navigate to &lt;code&gt;http://localhost:8080/hello/world&lt;/code&gt;, to see your mock in action.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion:
&lt;/h1&gt;

&lt;p&gt;There are already a lot of mocking tools already available like Wiremock, mountebank etc. And those are really great tools, but in my experience, it took me sometime to familiarise myself with the tool, their JSON schema and other available options. The problem statement Camouflage tries to tackle is simple, how to shorten the learning curve and get started with mocks creation within seconds.&lt;/p&gt;

&lt;p&gt;On more details on how to use Camouflage, visit the &lt;a href="https://testinggospels.github.io/camouflage/"&gt;documentation&lt;/a&gt;. If you'd like to contribute, you can do so by &lt;a href="https://github.com/testinggospels/camouflage/issues"&gt;reporting bugs&lt;/a&gt;, providing &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLSe0dUkechoNoiFCGhUmBM9VS5zy5E8RQIWwo-XP85sAKPwZsg/viewform"&gt;suggestions&lt;/a&gt; on what more protocols can be implemented and use cases to cover and finally by creating &lt;a href="https://github.com/testinggospels/camouflage/"&gt;pull requests&lt;/a&gt; for the changes you'd like to see.&lt;/p&gt;

&lt;p&gt;Happy Mocking!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>tooling</category>
      <category>webperf</category>
    </item>
    <item>
      <title>How To Mock APIs In Seconds</title>
      <dc:creator>Shubhendu Madhukar</dc:creator>
      <pubDate>Wed, 14 Apr 2021 00:51:25 +0000</pubDate>
      <link>https://dev.to/shubhendumadhukar/how-to-mock-apis-in-seconds-28ia</link>
      <guid>https://dev.to/shubhendumadhukar/how-to-mock-apis-in-seconds-28ia</guid>
      <description>&lt;p&gt;If you are a part of a testing community in a microservices world, you would often come across challenges in terms of environment availability, resource constraints, clash in release cycles and what not.&lt;/p&gt;

&lt;p&gt;Consider an example where you are testing the application A. During one of your test flows, application A makes a downstream call to application B. And guess what? For one or more of the many reasons, application B is unavailable. You end up waiting for application B even though, it is just a dependency that you are not even testing.&lt;/p&gt;

&lt;p&gt;In these scenarios, you can use a mock API to act as a stand in for application B and provide application A with dummy responses so that you can continue your tests without any dependency on the downstream.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What are HTTP mocks?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;HTTP Mocks or Stubs, are replacements for your actual APIs, which can be used for testing purposes. Mocks are great for several reasons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You are building a frontend application but your backend isn't ready yet. Use mocks to quickly create an API which provides you a dummy response and test your frontend application without actually hitting a backend. Once your backend is ready just replace the mock server host with the actual server host in your configs and everything else remains the same.&lt;/li&gt;
&lt;li&gt;You can have similar use cases while running unit tests, functional tests or even performance tests, where as long as the mock API can simulate the latency and provide a response similar to actual response, you don't need your complete backend and downstream to be ready for running tests in silos.&lt;/li&gt;
&lt;li&gt;Mocks are also great for debugging purposes, when you are testing multiple microservices together. Even with advanced monitoring tools, sometimes it's hard to pinpoint the exact cause of the issue. With mocks you can plug and play and debug which component is causing problems&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;How do you create mocks?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While there are a lot many tools available in open source world that allow you to create mocks, in this article I'll discuss a new tool I have been working on. Camouflage.&lt;/p&gt;

&lt;p&gt;Camouflage works just as the name suggests. It allows you to create and use dummy APIs. And your front end or dependant applications wouldn't be able to tell the difference if the response is coming from a mock or an actual API.&lt;/p&gt;

&lt;p&gt;Though Camouflage isn't an original idea (mockserver already implemented something similar), it has a lot of cool features and enhancements over existing tools that help you get up and running within seconds. Few of the prominent features are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Camouflage has a near minimum learning curve. Create a directory mocks/hello-world. Place a file named GET.mock containing your raw HTTP Response. And you are done. Make a GET request to /hello-world and you get your expected response.&lt;/li&gt;
&lt;li&gt;Camouflage heavily uses handlebars, which enables you to add character to your response. Insert dynamic random values that change on each invocation, fetch data from incoming request and send out a conditional response, simulate delays and lot more.&lt;/li&gt;
&lt;li&gt;Camouflage comes in two modes, functional and performance. By default Camouflage runs in functional mode, which is sufficient for unit tests, frontend testing, even a small scale performance test. However if your machine has multiple CPUs and you are planning to run a performance test, why not make use of the full potential of your machine. You can use performance mode which lets Camouflage utilise multiple CPUs using node's cluster module.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Enough talk. How do we create a mock?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Well, you follow five simple steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install Camouflage: &lt;code&gt;npm install -g camouflage-server&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Create a mocks directory which will contain all your mocks. e.g. &lt;code&gt;~/mocks&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Start Camouflage: &lt;code&gt;camouflage -m ~/mocks&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Create another directory in the format your APIs basepath would be. For example: For an API &lt;code&gt;http://localhost:8080/hello/world&lt;/code&gt;, create directories as &lt;code&gt;~/mocks/hello/world&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Create a file ${HTTP_METHOD}.mock and insert your HTTP raw response. e.g &lt;code&gt;vi ~/mocks/hello/world/GET.mock&lt;/code&gt; and paste following content. (If you are on windows, simply use notepad.)
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HTTP/1.1 200 OK
X-Custom-Header: Custom-Value
Content-Type: application/json
{
     "greeting": "Hey! It works!"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And you are done, navigate to &lt;a href="http://localhost:8080/hello/world"&gt;http://localhost:8080/hello/world&lt;/a&gt;, to see your mock in action.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There are already a lot of mocking tools already available like Wiremock, mountebank etc. And those are really great tools, but in my experience, it took me sometime to familiarise myself with the tool, their JSON schema and other available options. The problem statement Camouflage tries to tackle is simple, how to shorten the learning curve and get started with mocks creation within seconds.&lt;/p&gt;

&lt;p&gt;Learn more:&lt;br&gt;
&lt;a href="https://fauxauldrich.github.io/camouflage/"&gt;Documentation&lt;/a&gt;&lt;br&gt;
&lt;a href="http://github.com/fauxauldrich/camouflage"&gt;Source Code&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>tooling</category>
      <category>webdev</category>
      <category>webperf</category>
    </item>
  </channel>
</rss>
