<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Veracity Solutions</title>
	<atom:link href="https://veracitysolutions.com/feed" rel="self" type="application/rss+xml" />
	<link>https://veracitysolutions.com</link>
	<description></description>
	<lastBuildDate>
	Tue, 09 Jul 2019 21:10:39 +0000	</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.1.1</generator>
	<item>
		<title>AI is Maturing</title>
		<link>https://veracitysolutions.com/community-blog/ai-is-maturing</link>
				<comments>https://veracitysolutions.com/community-blog/ai-is-maturing#respond</comments>
				<pubDate>Mon, 20 May 2019 08:00:40 +0000</pubDate>
		<dc:creator><![CDATA[JG Perrin]]></dc:creator>
				<category><![CDATA[Community Blog]]></category>

		<guid isPermaLink="false">https://www.veracitysolutions.com/?p=19652</guid>
				<description><![CDATA[<p>Yes. AI (artificial intelligence) is maturing. AI is still limited to its narrow definition. It is not yet the general AI you see taking over Earth in those crazy science fiction movies. So, in this context, what does it mean that AI is maturing?</p>
<p>The post <a rel="nofollow" href="https://veracitysolutions.com/community-blog/ai-is-maturing">AI is Maturing</a> appeared first on <a rel="nofollow" href="https://veracitysolutions.com">Veracity Solutions</a>.</p>
]]></description>
								<content:encoded><![CDATA[<div      class="vc_row wpb_row section vc_row-fluid " style=' text-align:left;'><div class=" full_section_inner clearfix"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>Yes. AI (artificial intelligence) is maturing. AI is still limited to its narrow definition. It is not yet the general AI you see taking over Earth in those crazy science fiction movies. So, in this context, what does it mean that AI is maturing?</p>
<p>I just came back from <a href="https://www.ibm.com/think">IBM’s Think conference</a>. <em>Think</em> is to IBM fans what <em>Burning Man</em> is to Californians and hippies, even if there is no obvious direct correlation between the two. It is a major conference, where over 30,000 people gather to learn and celebrate technology and its usage. I wanted to share with you some takeaways, specifically in the field of AI.</p>
<p>Maturing means that processes are coming into place. Maturing means that tools are addressing key issues like bias or usability. Maturing means that people have learned from previous errors. Those errors are analyzed and built open.</p>
<p>In a short interview with theCUBE, my friend Rob Thomas, summarizes some his vision and explains some key concepts:</p>
<ul>
<li><strong>There is no AI without IA</strong> (information architecture).</li>
<li>Methodology is definitely part of the process.</li>
</ul>
<p>Let’s drill down into both of these concepts.</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<h4>AI without IA</h4>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 8px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>Information architecture is a requirement to artificial intelligence. At first, it almost seems tautologic, right?</p>
<p>However, when you look at the enterprise, this is not true anymore – if it has been at anytime. A customer of ours had 83 databases mixed in both on premise and in the cloud. Another started</p>

		</div> 
	</div> </div></div></div></div></div><div      class="vc_row wpb_row section vc_row-fluid " style=' text-align:left;'><div class=" full_section_inner clearfix"><div class="wpb_column vc_column_container vc_col-sm-6"><div class="vc_column-inner"><div class="wpb_wrapper">	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_single_image wpb_content_element vc_align_left">
		<div class="wpb_wrapper">
			
			<div class="vc_single_image-wrapper   vc_box_border_grey"><img width="371" height="439" src="https://veracitysolutions.com/wp-content/uploads/2019/04/01-1.png" class="vc_single_image-img attachment-large" alt="" srcset="https://veracitysolutions.com/wp-content/uploads/2019/04/01-1.png 371w, https://veracitysolutions.com/wp-content/uploads/2019/04/01-1-254x300.png 254w" sizes="(max-width: 371px) 100vw, 371px" /></div>
		</div>
	</div>

	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p><em>Figure 1 An illustrated way to do machine learning, from </em>xkcd<em>.</em></p>

		</div> 
	</div> </div></div></div><div class="wpb_column vc_column_container vc_col-sm-6"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>development on Azure before settling to AWS, forcing the company to manage both. The latter also combined on-premise data, AWS, and using various Watson services.</p>
<p>IT is mostly about processing data. In French, IT is called “<em>informatique”</em>, which translates to informatics. It means <strong>automated processing of information</strong>. That’s what humans have been trying to do since the beginning of this science. Since the beginning of those times, we learned the idiom: <strong>garbage in, garbage out</strong>.</p>
<p>Machine learning and now AI is an evolution of data processing. In an oversimplified definition, humans create a model from an existing dataset and then the computer reapplies the model, a bit like a function. However, in AI, you do that over and over.</p>

		</div> 
	</div> </div></div></div></div></div><div      class="vc_row wpb_row section vc_row-fluid " style=' text-align:left;'><div class=" full_section_inner clearfix"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>You now start to understand that the quality of the data coming into an AI system needs to be even higher than for standard data processing. This is where the need for an <strong>information architecture</strong> becomes important. Starting an AI practice or project in your organization, without having the proper architecture in place may not bring the quality of the data (or metadata) expected by your AI system.</p>
<p>Not having the architecture will also harm the result and maintainability of your AI system after the initial implementation. Models built by humans are naturally biased, as we all are. Bias is amplified by the system, like this case, a few months ago, of an AI-based recruiting system at Amazon who <a href="https://www.reuters.com/article/us-amazon-com-jobs-automation-insight/amazon-scraps-secret-ai-recruiting-tool-that-showed-bias-against-women-idUSKCN1MK08G">discriminated against women</a>.</p>
<p>Part of their suite of AI-oriented building tools, IBM offers a solution for detecting and helping you correct <a href="https://www.ibm.com/blogs/cloud-computing/2018/09/21/cloud-ai-remove-bias/">bias</a>. Correcting and adapting bias is doable, but it means you have to manage different versions of the same model. Tracking the various versions of models and their parameters (like hyperparameters) is a challenge that traditional source control tools like GitHub may not be equipped to do.</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>

</div></div></div></div></div><div      class="vc_row wpb_row section vc_row-fluid " style=' text-align:left;'><div class=" full_section_inner clearfix"><div class="wpb_column vc_column_container vc_col-sm-6"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<h4>The AI ladder</h4>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>To get outcomes from data science (see this <a href="http://jgp.net/2019/02/11/eleven-key-elements-of-data-science-outcome/">post</a>) and AI, you will need a methodology. Thomas and his teams call this process the <strong>AI ladder</strong>. The foundation remains data, but this data needs to be organized, rationalized, governed and architected: in two words, you need <strong>information architecture</strong>. Once more, the baseline becomes obvious: there is no AI without IA.</p>

		</div> 
	</div> </div></div></div><div class="wpb_column vc_column_container vc_col-sm-6"><div class="vc_column-inner"><div class="wpb_wrapper">	<div class="vc_empty_space"  style="height: 64px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_single_image wpb_content_element vc_align_left">
		<div class="wpb_wrapper">
			
			<div class="vc_single_image-wrapper   vc_box_border_grey"><img width="589" height="301" src="https://veracitysolutions.com/wp-content/uploads/2019/04/02-1.png" class="vc_single_image-img attachment-large" alt="" srcset="https://veracitysolutions.com/wp-content/uploads/2019/04/02-1.png 589w, https://veracitysolutions.com/wp-content/uploads/2019/04/02-1-300x153.png 300w" sizes="(max-width: 589px) 100vw, 589px" /></div>
		</div>
	</div>

	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p><em>Figure 2 Thomas&#8217; AI ladder</em></p>

		</div> 
	</div> </div></div></div></div></div><div      class="vc_row wpb_row section vc_row-fluid " style=' text-align:left;'><div class=" full_section_inner clearfix"><div class="wpb_column vc_column_container vc_col-sm-3"><div class="vc_column-inner"><div class="wpb_wrapper">	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_single_image wpb_content_element vc_align_left">
		<div class="wpb_wrapper">
			
			<div class="vc_single_image-wrapper   vc_box_border_grey"><img width="253" height="255" src="https://veracitysolutions.com/wp-content/uploads/2019/04/03-1.png" class="vc_single_image-img attachment-large" alt="" srcset="https://veracitysolutions.com/wp-content/uploads/2019/04/03-1.png 253w, https://veracitysolutions.com/wp-content/uploads/2019/04/03-1-150x150.png 150w" sizes="(max-width: 253px) 100vw, 253px" /></div>
		</div>
	</div>

	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p style="text-align: center;"><em>Figure 3 </em><em>The virtuous </em><em>circle</em></p>
<p> </p>

		</div> 
	</div> </div></div></div><div class="wpb_column vc_column_container vc_col-sm-9"><div class="vc_column-inner"><div class="wpb_wrapper">	<div class="vc_empty_space"  style="height: 32px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>BM has decided to split IT data-oriented offerings in three groups: <strong>collect</strong>, <strong>organize</strong>, and <strong>analyze</strong>. Those are building blocks. You do not really have to start at a particular spot. Nevertheless, my experience showed me that companies are pretty good at collecting. Those companies directly want to analyze (and this is the second step of the ladder). Although they can see some outcomes, they quickly realize that without organizing the data, they fail or hit a glass ceiling.</p>
<p>One of the key elements remains: the talented people you will put in your data science team and how you can manage them. At Think, I talked with peers about how to organize data science teams. It helped me realize</p>

		</div> 
	</div> </div></div></div></div></div><div      class="vc_row wpb_row section vc_row-fluid " style=' text-align:left;'><div class=" full_section_inner clearfix"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>that, twelve years ago, I built the perfect data science team (without knowing it). It’s not rocket science, I share some takeaways on my <a href="http://jgp.net/2019/02/26/how-i-built-the-perfect-data-science-team/">blog</a>.</p>
<p>If you want to know more, you can watch <a href="https://youtu.be/wJCBksT_YZc">Rob Thomas’ full interview</a> on YouTube.</p>
<p>Veracity can definitely help you in building the information architecture you will need to get to AI and help you climb your ladder, whether you are an IBM shop or not.</p>

		</div> 
	</div> </div></div></div></div></div>
<p>The post <a rel="nofollow" href="https://veracitysolutions.com/community-blog/ai-is-maturing">AI is Maturing</a> appeared first on <a rel="nofollow" href="https://veracitysolutions.com">Veracity Solutions</a>.</p>
]]></content:encoded>
							<wfw:commentRss>https://veracitysolutions.com/community-blog/ai-is-maturing/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>Angular Unit Testing pt.4</title>
		<link>https://veracitysolutions.com/community-blog/angular-unit-testing-part-4</link>
				<comments>https://veracitysolutions.com/community-blog/angular-unit-testing-part-4#respond</comments>
				<pubDate>Mon, 22 Apr 2019 08:00:20 +0000</pubDate>
		<dc:creator><![CDATA[Gary Burns]]></dc:creator>
				<category><![CDATA[Community Blog]]></category>

		<guid isPermaLink="false">https://www.veracitysolutions.com/?p=19639</guid>
				<description><![CDATA[<p>Continuing from the third article in this series, we are now set up to debug the individual unit tests to see if our variables contain the proper values, or why tests may be failing.</p>
<p>The post <a rel="nofollow" href="https://veracitysolutions.com/community-blog/angular-unit-testing-part-4">Angular Unit Testing pt.4</a> appeared first on <a rel="nofollow" href="https://veracitysolutions.com">Veracity Solutions</a>.</p>
]]></description>
								<content:encoded><![CDATA[<div      class="vc_row wpb_row section vc_row-fluid " style=' text-align:left;'><div class=" full_section_inner clearfix"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>Angular Unit Testing</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<h4>Set Up</h4>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>If you do not already have a basic Angular CLI project, check out <a href="https://veracitysolutions.com/community-blog/who-moved-my-ngmodel-2">Installing Angular CLI</a></p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<h4>Basic Debugging of Unit Tests</h4>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>Continuing from the <a href="https://veracitysolutions.com/community-blog/angular-unit-testing-part-3">third article in this series</a>, we are now set up to debug the individual unit tests to see if our variables contain the proper values, or why tests may be failing.<br />
We will be using VSCode. Ensure you have Debugger for Chrome installed. In VSCode, Click Debug, then Install Additional Debuggers:</p>
<p><img class="alignnone size-medium wp-image-19641" src="https://veracitysolutions.com/wp-content/uploads/2019/04/01-300x204.png" alt="" width="300" height="204" srcset="https://veracitysolutions.com/wp-content/uploads/2019/04/01-300x204.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/04/01-768x524.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/04/01-1024x698.png 1024w, https://veracitysolutions.com/wp-content/uploads/2019/04/01-700x477.png 700w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>Open VSCode and create a Book model that will contain the results from our service mock data</p>
<p><img class="alignnone size-medium wp-image-19642" src="https://veracitysolutions.com/wp-content/uploads/2019/04/02-300x206.png" alt="" width="300" height="206" srcset="https://veracitysolutions.com/wp-content/uploads/2019/04/02-300x206.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/04/02-768x526.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/04/02-1024x702.png 1024w, https://veracitysolutions.com/wp-content/uploads/2019/04/02-700x480.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/04/02.png 1227w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>Open registration component and have getResults call the registrationService to get books to register</p>
<p><img class="alignnone size-medium wp-image-19643" src="https://veracitysolutions.com/wp-content/uploads/2019/04/03-300x293.png" alt="" width="300" height="293" srcset="https://veracitysolutions.com/wp-content/uploads/2019/04/03-300x293.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/04/03-768x750.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/04/03-1024x1000.png 1024w, https://veracitysolutions.com/wp-content/uploads/2019/04/03-700x683.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/04/03.png 1220w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>If there are results, we want to set the results variable and call showResults</p>
<p>In VSCode, open registration component tests and create a test for the getResults function:</p>
<p><img class="alignnone size-medium wp-image-19644" src="https://veracitysolutions.com/wp-content/uploads/2019/04/04-283x300.png" alt="" width="283" height="300" srcset="https://veracitysolutions.com/wp-content/uploads/2019/04/04-283x300.png 283w, https://veracitysolutions.com/wp-content/uploads/2019/04/04-768x816.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/04/04-964x1024.png 964w, https://veracitysolutions.com/wp-content/uploads/2019/04/04-700x743.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/04/04.png 1568w" sizes="(max-width: 283px) 100vw, 283px" /></p>
<p>There are a few modifications to be able to mock the registration service in the test class</p>
<p>Be sure to include all of the imports at the top, specifically the service and “of” to return the data</p>
<p><strong>registrationServiceMock</strong> – represents our mock of the service that we set on line 27</p>
<p><strong>registrationServiceStub</strong> – acts as the actual service which returns resultsData, the mock data</p>
<p><strong>spyon</strong> – used to check if a function was called and provide a custom value.  In this case we are mocking a call for the registrationService.getBooks function.  When we call the component’s getResults function, it mimics the call to registrationService.getBooks and the registrationServiceStub returns our mock data.</p>
<p><strong>expect</strong> – takes a value to test against another value or state</p>
<p>Open a command prompt and go to working directory</p>
<p><em>Cd C:\proj\tutorials\unittests\angular-testing</em></p>
<p>Type command to execute tests</p>
<p><em>ng test</em></p>
<p>You should see all tests passed:</p>
<p><img class="alignnone size-medium wp-image-19645" src="https://veracitysolutions.com/wp-content/uploads/2019/04/05-300x246.png" alt="" width="300" height="246" srcset="https://veracitysolutions.com/wp-content/uploads/2019/04/05-300x246.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/04/05-768x629.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/04/05-700x573.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/04/05.png 915w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>Now let’s open the Chrome debugger &#8211; Hit F12 and you should see this:</p>
<p><img class="alignnone size-medium wp-image-19646" src="https://veracitysolutions.com/wp-content/uploads/2019/04/06-300x248.png" alt="" width="300" height="248" srcset="https://veracitysolutions.com/wp-content/uploads/2019/04/06-300x248.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/04/06-768x634.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/04/06-1024x846.png 1024w, https://veracitysolutions.com/wp-content/uploads/2019/04/06-700x578.png 700w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>Type “debugger;” in the registration.component.ts file, getResults method:</p>
<p><img class="alignnone size-medium wp-image-19647" src="https://veracitysolutions.com/wp-content/uploads/2019/04/07-300x300.png" alt="" width="300" height="300" srcset="https://veracitysolutions.com/wp-content/uploads/2019/04/07-300x300.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/04/07-150x150.png 150w, https://veracitysolutions.com/wp-content/uploads/2019/04/07-768x768.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/04/07-1024x1024.png 1024w, https://veracitysolutions.com/wp-content/uploads/2019/04/07-570x570.png 570w, https://veracitysolutions.com/wp-content/uploads/2019/04/07-500x500.png 500w, https://veracitysolutions.com/wp-content/uploads/2019/04/07-1000x1000.png 1000w, https://veracitysolutions.com/wp-content/uploads/2019/04/07-700x700.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/04/07.png 1255w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>Save the file and the browser will refresh and rerun the tests.  But now it will break into the debugger on that line</p>
<p><img class="alignnone size-medium wp-image-19648" src="https://veracitysolutions.com/wp-content/uploads/2019/04/08-201x300.png" alt="" width="201" height="300" srcset="https://veracitysolutions.com/wp-content/uploads/2019/04/08-201x300.png 201w, https://veracitysolutions.com/wp-content/uploads/2019/04/08-768x1145.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/04/08-687x1024.png 687w, https://veracitysolutions.com/wp-content/uploads/2019/04/08-700x1044.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/04/08.png 1151w" sizes="(max-width: 201px) 100vw, 201px" /></p>
<p>If you hover over the data variable, you will see its current value, which includes the single book mock data from the unit test.  You can also see it in the Scope section at the bottom</p>
<p>Click step over icon  Twice</p>
<p>You can see that since we have data, we step into the first IF to call showResults</p>
<p><img class="alignnone size-medium wp-image-19649" src="https://veracitysolutions.com/wp-content/uploads/2019/04/09-198x300.png" alt="" width="198" height="300" srcset="https://veracitysolutions.com/wp-content/uploads/2019/04/09-198x300.png 198w, https://veracitysolutions.com/wp-content/uploads/2019/04/09-768x1161.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/04/09-677x1024.png 677w, https://veracitysolutions.com/wp-content/uploads/2019/04/09-700x1058.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/04/09.png 1127w" sizes="(max-width: 198px) 100vw, 198px" /></p>
<p>You can also set a breakpoint in this view by clicking to the left of the line number, example line 33</p>
<p><img class="alignnone size-medium wp-image-19640" src="https://veracitysolutions.com/wp-content/uploads/2019/04/10-192x300.png" alt="" width="192" height="300" srcset="https://veracitysolutions.com/wp-content/uploads/2019/04/10-192x300.png 192w, https://veracitysolutions.com/wp-content/uploads/2019/04/10-768x1197.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/04/10-657x1024.png 657w, https://veracitysolutions.com/wp-content/uploads/2019/04/10-700x1091.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/04/10.png 1097w" sizes="(max-width: 192px) 100vw, 192px" /></p>
<p>With this breakpoint, we can step through other areas without having to add “debugger;” to the code</p>
<p>You can imagine how this simple debugging can be extremely helpful if a test is failing and it is difficult to identify the reason at first glance.</p>
<p><a href="https://angular.io/guide/testing">More information on Angular testing</a></p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>

</div></div></div></div></div><div      class="vc_row wpb_row section vc_row-fluid " style=' text-align:left;'><div class=" full_section_inner clearfix"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper"></div></div></div></div></div>
<p>The post <a rel="nofollow" href="https://veracitysolutions.com/community-blog/angular-unit-testing-part-4">Angular Unit Testing pt.4</a> appeared first on <a rel="nofollow" href="https://veracitysolutions.com">Veracity Solutions</a>.</p>
]]></content:encoded>
							<wfw:commentRss>https://veracitysolutions.com/community-blog/angular-unit-testing-part-4/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>Angular Unit Testing pt.3</title>
		<link>https://veracitysolutions.com/community-blog/angular-unit-testing-part-3</link>
				<comments>https://veracitysolutions.com/community-blog/angular-unit-testing-part-3#respond</comments>
				<pubDate>Mon, 08 Apr 2019 08:00:38 +0000</pubDate>
		<dc:creator><![CDATA[Gary Burns]]></dc:creator>
				<category><![CDATA[Community Blog]]></category>

		<guid isPermaLink="false">https://www.veracitysolutions.com/?p=19586</guid>
				<description><![CDATA[<p>Continuing from the second article in this series, we are now ready to create a service with unit tests.  First, we will install a package that will allow mocking data.</p>
<p>The post <a rel="nofollow" href="https://veracitysolutions.com/community-blog/angular-unit-testing-part-3">Angular Unit Testing pt.3</a> appeared first on <a rel="nofollow" href="https://veracitysolutions.com">Veracity Solutions</a>.</p>
]]></description>
								<content:encoded><![CDATA[<div      class="vc_row wpb_row section vc_row-fluid " style=' text-align:left;'><div class=" full_section_inner clearfix"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<h3>Set Up</h3>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>If you do not already have a basic Angular CLI project, check out <a href="https://veracitysolutions.com/community-blog/who-moved-my-ngmodel-2">Installing Angular CLI</a></p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<h3>Angular Unit Testing</h3>

		</div> 
	</div> 
	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>Continuing from the <a href="https://veracitysolutions.com/community-blog/who-moved-my-ngmodel-2-2">second article in this series</a>, we are now ready to create a service with unit tests.  First, we will install a package that will allow mocking data.</p>
<p>Open a command prompt and go to working directory</p>
<p><em>Cd C:\proj\tutorials\unittests\angular-testing</em></p>
<p>Install json server in order to create a mock data service</p>
<p><em>npm install -g json-server</em></p>
<p>Add a file to the root directory for returning mock data</p>
<p><em>Right-click&gt;new file then type “mockdata.json”</em></p>
<p>Then copy this json data into the file and save</p>
<p>&nbsp;</p>
<pre class="EnlighterJSRAW" data-enlighter-language="js" data-enlighter-theme="twilight">{"books" : [ {"id": 1,"rpice" : 14.95,"name" : "The Great Gatsby"},{"id": 2,"age" : 19.99,"name" : "To Kill a Mockingbird"}],"comments" : [{"id": 1,"date" : "03-18-2016","message" : "Great book!"},{"id": 2,"date" : "06-21-2017","message" : "A true classic!"}]}</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><img class="alignnone size-medium wp-image-19590" src="https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-01-300x215.png" alt="" width="300" height="215" srcset="https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-01-300x215.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-01-768x551.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-01-1024x735.png 1024w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-01-700x502.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-01.png 1514w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>Run the json server to test the api, type this in the command window</p>
<p><em>json-server &#8211;watch mockdata.json</em></p>
<p>You should see the server running to reveal 2 endpoints</p>
<p><img class="alignnone size-medium wp-image-19591" src="https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-02-300x150.png" alt="" width="300" height="150" srcset="https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-02-300x150.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-02-768x385.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-02-1024x513.png 1024w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-02-1000x500.png 1000w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-02-700x351.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-02.png 1195w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>Open a browser and type in the endpoints to see the data</p>
<p><img class="alignnone size-medium wp-image-19592" src="https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-03-300x295.png" alt="" width="300" height="295" srcset="https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-03-300x295.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-03.png 624w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>Great, our mock data service is working!</p>
<p>Add a service to the project for the registration component<br />
Open a command prompt and go to the project app directory:</p>
<p><em>Cd C:\proj\tutorials\unittests\angular-testing\src\app\registration</em></p>
<p>Enter the following to create a service named “registration”</p>
<p><em>ng g service registration</em></p>
<p>You should now see 2 new files added &#8211; registration service and its unit test file</p>
<p><img class="alignnone size-medium wp-image-19593" src="https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-04-300x210.png" alt="" width="300" height="210" srcset="https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-04-300x210.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-04-768x538.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-04-1024x717.png 1024w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-04-700x490.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-04.png 1513w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>In registration service, create a function that returns the mock data, include the imports at the top, include the url from the mockdata service along with the getBooks function</p>
<p><img class="alignnone size-medium wp-image-19594" src="https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-05-300x147.png" alt="" width="300" height="147" srcset="https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-05-300x147.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-05-768x376.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-05-1024x501.png 1024w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-05-700x343.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-05.png 1593w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>In registration component, call the getBooks function in onInit, include the registrationService in the constructor in order to use it, include RegistrationService in the import section</p>
<p><img class="alignnone size-medium wp-image-19595" src="https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-06-280x300.png" alt="" width="280" height="300" srcset="https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-06-280x300.png 280w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-06-768x823.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-06-956x1024.png 956w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-06-700x750.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-06.png 1220w" sizes="(max-width: 280px) 100vw, 280px" /></p>
<p>Open the RegistrationService and create a unit test for the service that will test that the correct action “GET” and the correct url is being called, include the code in this screenshot to set up the test</p>
<p><img class="alignnone size-medium wp-image-19596" src="https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-07-293x300.png" alt="" width="293" height="300" srcset="https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-07-293x300.png 293w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-07-768x786.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-07-1001x1024.png 1001w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-07-700x716.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-07.png 1578w" sizes="(max-width: 293px) 100vw, 293px" /></p>
<p>Open app.component and be sure to add HttpClientModule</p>
<p><img class="alignnone size-medium wp-image-19597" src="https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-08-300x194.png" alt="" width="300" height="194" srcset="https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-08-300x194.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-08-768x496.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-08-1024x661.png 1024w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-08-400x260.png 400w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-08-700x452.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-08.png 1323w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>Add HttpClientModule to the registration component import section beforeEach</p>
<p><img class="alignnone size-medium wp-image-19598" src="https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-09-300x177.png" alt="" width="300" height="177" srcset="https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-09-300x177.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-09-768x454.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-09-1024x606.png 1024w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-09-700x414.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-09.png 1302w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>Open a command prompt and go to working directory</p>
<p><em>Cd C:\proj\tutorials\unittests\angular-testing</em></p>
<p>Enter command to start the unit tests</p>
<p><em>ng test</em></p>
<p>You will see the browser open and show the 5 tests have passed, including the registration and service tests</p>
<p><img class="alignnone size-medium wp-image-19599" src="https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-10-300x289.png" alt="" width="300" height="289" srcset="https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-10-300x289.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-10-768x740.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-10-700x675.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-10.png 942w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>While debugging, you probably do not want every test to run, add “fit” in front of a test and only that test will execute</p>
<p><img class="alignnone size-medium wp-image-19600" src="https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-11-275x300.png" alt="" width="275" height="300" srcset="https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-11-275x300.png 275w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-11-768x838.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-11-938x1024.png 938w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-11-700x764.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-11.png 1231w" sizes="(max-width: 275px) 100vw, 275px" /></p>
<p>Now you see that only showResults should set resultsExist to true executed</p>
<p><img class="alignnone size-medium wp-image-19601" src="https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-12-300x268.png" alt="" width="300" height="268" srcset="https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-12-300x268.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-12-768x686.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-12-700x625.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-12.png 839w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>If you want all tests in a single file to run, instead of all tests, open the test.ts file</p>
<p><img class="alignnone size-medium wp-image-19602" src="https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-13-300x239.png" alt="" width="300" height="239" srcset="https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-13-300x239.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-13-768x613.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-13-1024x817.png 1024w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-13-700x559.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-13.png 1120w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>Add the name of the component you want to test on line 18</p>
<p><img class="alignnone size-medium wp-image-19603" src="https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-14-300x182.png" alt="" width="300" height="182" srcset="https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-14-300x182.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-14-768x467.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-14-1024x623.png 1024w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-14-700x426.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-14.png 1408w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>Save, you will see the tests refresh and only execute registration component tests have run</p>
<p><img class="alignnone size-medium wp-image-19604" src="https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-15-300x216.png" alt="" width="300" height="216" srcset="https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-15-300x216.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-15-700x504.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/03/BG-pt3-15.png 739w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>That’s a lot of information for now.  More to come in the next article that will include debugging unit tests.</p>
<h3>Json server</h3>
<p>Created for front-end developers who need a quick back-end for prototyping and mocking.</p>
<p><a href="https://www.npmjs.com/package/json-server">More information on json server</a></p>
<h3>HttpClientModule</h3>
<p>Configures the dependency injector for HttpClient with supporting services for XSRF. Automatically imported by HttpClientModule.</p>
<p><a href="https://angular.io/api/common/http/HttpClientModule">More information on HttpClientModule</a></p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>

</div></div></div></div></div>
<p>The post <a rel="nofollow" href="https://veracitysolutions.com/community-blog/angular-unit-testing-part-3">Angular Unit Testing pt.3</a> appeared first on <a rel="nofollow" href="https://veracitysolutions.com">Veracity Solutions</a>.</p>
]]></content:encoded>
							<wfw:commentRss>https://veracitysolutions.com/community-blog/angular-unit-testing-part-3/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>Angular Unit Testing pt.2</title>
		<link>https://veracitysolutions.com/community-blog/angular-unit-testing-part-2</link>
				<comments>https://veracitysolutions.com/community-blog/angular-unit-testing-part-2#respond</comments>
				<pubDate>Tue, 19 Feb 2019 18:59:56 +0000</pubDate>
		<dc:creator><![CDATA[Gary Burns]]></dc:creator>
				<category><![CDATA[Community Blog]]></category>

		<guid isPermaLink="false">https://www.veracitysolutions.com/?p=19529</guid>
				<description><![CDATA[<p>Part 2 of our Angular unit testing. Creating and executing your unit test.</p>
<p>The post <a rel="nofollow" href="https://veracitysolutions.com/community-blog/angular-unit-testing-part-2">Angular Unit Testing pt.2</a> appeared first on <a rel="nofollow" href="https://veracitysolutions.com">Veracity Solutions</a>.</p>
]]></description>
								<content:encoded><![CDATA[<div      class="vc_row wpb_row section vc_row-fluid " style=' text-align:left;'><div class=" full_section_inner clearfix"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<h3>Set Up</h3>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>If you do not already have a basic Angular CLI project, check out <a href="https://veracitysolutions.com/community-blog/who-moved-my-ngmodel-2">Installing Angular CLI</a></p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<h3>Create and Execute Unit Tests</h3>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>Open Visual Studio Code</p>
<p>File&gt;Open Folder&gt; C:\proj\tutorials\unittests\angular-testing &gt; Select Folder</p>
<p><img class="alignnone size-medium wp-image-19527" src="https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-01-300x164.png" alt="" width="300" height="164" srcset="https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-01-300x164.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-01-768x420.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-01-1024x560.png 1024w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-01-700x383.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-01.png 1443w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>Expand the src&gt;app node to show the app.component.</p>
<p><img class="alignnone size-medium wp-image-19528" src="https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-02-300x100.png" alt="" width="300" height="100" srcset="https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-02-300x100.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-02-768x255.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-02-1024x340.png 1024w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-02-700x233.png 700w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>Open a command prompt and go to the project app directory:</p>
<p><em>Cd C:\proj\tutorials\unittests\angular-testing\src\app</em></p>
<p>Create a new component named “registration”</p>
<p><em>ng generate component registration</em></p>
<p><img class="alignnone size-medium wp-image-19531" src="https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-03-300x97.png" alt="" width="300" height="97" srcset="https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-03-300x97.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-03-768x248.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-03-1024x330.png 1024w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-03-700x226.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-03.png 1100w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>You should now see the new registration folder and components</p>
<p><img class="alignnone size-medium wp-image-19532" src="https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-04-253x300.png" alt="" width="253" height="300" srcset="https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-04-253x300.png 253w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-04-700x830.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-04.png 726w" sizes="(max-width: 253px) 100vw, 253px" /></p>
<p>Show the registration component in the app by adding it to the bottom of the app.component.html, remove the other links which are not necessary:</p>
<p><img class="alignnone size-medium wp-image-19533" src="https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-05-300x66.png" alt="" width="300" height="66" srcset="https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-05-300x66.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-05-768x168.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-05-1024x224.png 1024w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-05-700x153.png 700w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>Run the ng serve command to build and run the code in a browser</p>
<p><em>ng serve -o</em></p>
<p><img class="alignnone size-medium wp-image-19534" src="https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-06-300x88.png" alt="" width="300" height="88" srcset="https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-06-300x88.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-06-768x225.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-06-1024x300.png 1024w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-06-700x205.png 700w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>A browser should open with the basic Angular app with the registration component showing</p>
<p><img class="alignnone size-medium wp-image-19535" src="https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-07-300x232.png" alt="" width="300" height="232" srcset="https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-07-300x232.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-07-768x594.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-07-1024x793.png 1024w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-07-700x542.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-07.png 1288w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>Add the RegistrationComponent to app.component.spec.ts, delete everything else</p>
<p><img class="alignnone size-medium wp-image-19536" src="https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-08-300x127.png" alt="" width="300" height="127" srcset="https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-08-300x127.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-08-768x324.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-08-1024x433.png 1024w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-08-700x296.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-08.png 1394w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>Go back to the command line and hit Ctrl + C to stop the server, then type “y”</p>
<p><img class="alignnone size-medium wp-image-19537" src="https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-09-300x98.png" alt="" width="300" height="98" srcset="https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-09-300x98.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-09-768x250.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-09-1024x334.png 1024w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-09-700x228.png 700w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>Type command to execute tests</p>
<p><em>ng test</em></p>
<p><img class="alignnone size-medium wp-image-19538" src="https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-10-300x139.png" alt="" width="300" height="139" srcset="https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-10-300x139.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-10-768x357.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-10-1024x476.png 1024w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-10-700x325.png 700w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>The browser will open and should show a successful test run</p>
<p><img class="alignnone size-medium wp-image-19539" src="https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-11-300x105.png" alt="" width="300" height="105" srcset="https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-11-300x105.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-11-768x269.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-11-1024x359.png 1024w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-11-700x245.png 700w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>Create a variable ”resultsExist” and 2 functions in RegistrationComponent to hide and show results</p>
<p>Default the variable ”resultsExist” to false</p>
<p><img class="alignnone size-medium wp-image-19540" src="https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-12-297x300.png" alt="" width="297" height="300" srcset="https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-12-297x300.png 297w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-12-768x777.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-12.png 991w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-12-700x708.png 700w" sizes="(max-width: 297px) 100vw, 297px" /></p>
<p>Open registrationcomponent.spec.ts</p>
<p>Add “showResults should set resultsExist to true” and “hideResults should set resultsExist to false”</p>
<p><img class="alignnone size-medium wp-image-19541" src="https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-13-258x300.png" alt="" width="258" height="300" srcset="https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-13-258x300.png 258w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-13-768x893.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-13-881x1024.png 881w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-13-700x814.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-13.png 1215w" sizes="(max-width: 258px) 100vw, 258px" /></p>
<p>You should now see the results of the 3 tests that are in registration.component.spec</p>
<p><img class="alignnone size-medium wp-image-19530" src="https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-14-300x300.png" alt="" width="300" height="300" srcset="https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-14-300x300.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-14-150x150.png 150w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-14-570x570.png 570w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-14-500x500.png 500w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-14-700x701.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-14.png 726w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>It’s that simple.  You have just created 2 basic unit tests for the registration component!</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<h3>More information on the unit tests</h3>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p><img class="alignnone size-medium wp-image-19526" src="https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-15-258x300.png" alt="" width="258" height="300" srcset="https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-15-258x300.png 258w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-15-768x893.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-15-881x1024.png 881w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-15-700x814.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/02/AUTpt2-15.png 1215w" sizes="(max-width: 258px) 100vw, 258px" /></p>
<p>Our test component file “registration.component.spect.ts” was created for us when we created the registration component with the command “ng generate component registration”.</p>
<p><em>describe(‘RegistrationComponent’)…</em></p>
<p>The word “describe” starts a test block.  In this case, it is starting tests for the registration component, in other words, “for the registration component, include these tests”.  In the next tutorial we will be adding more test blocks.</p>
<p><em>beforeEach</em></p>
<p>“beforeEach” sets the dependencies before running the tests that follow.  You can see that it is setting the “fixture” variable to the component while creating it.  Then it is setting the “component” to the actual instance so we can use it to test methods.  Finally, we are executing detectChanges which triggers change detection where Angular checks property bindings.</p>
<p><em>‘should create’</em> – The first unit test provided by default</p>
<p>This test is given to use by default when the test file is generated.  It simply does a check to make sure the component is created.  Although it is simple, this test will fail if the file is missing a dependency, for example.</p>
<p><em>‘showResults should set </em>resultsExist<em> to true’</em></p>
<p>This is one of the tests that we created above.  First, we are calling the showResults method on the RegistrationComponent, then we are “expecting” the “resultsExists “variable to be true.</p>
<p>&nbsp;</p>
<p>These are very simple tests just to get started.  Stick around for some more examples of how to set up more complicated tests and dependencies.</p>

		</div> 
	</div> </div></div></div></div></div>
<p>The post <a rel="nofollow" href="https://veracitysolutions.com/community-blog/angular-unit-testing-part-2">Angular Unit Testing pt.2</a> appeared first on <a rel="nofollow" href="https://veracitysolutions.com">Veracity Solutions</a>.</p>
]]></content:encoded>
							<wfw:commentRss>https://veracitysolutions.com/community-blog/angular-unit-testing-part-2/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>Angular Unit Testing</title>
		<link>https://veracitysolutions.com/community-blog/angular-unit-testing</link>
				<comments>https://veracitysolutions.com/community-blog/angular-unit-testing#respond</comments>
				<pubDate>Wed, 16 Jan 2019 08:00:36 +0000</pubDate>
		<dc:creator><![CDATA[Gary Burns]]></dc:creator>
				<category><![CDATA[Community Blog]]></category>

		<guid isPermaLink="false">https://www.veracitysolutions.com/?p=19504</guid>
				<description><![CDATA[<p>Attending the NG Conf in 2018 was quite an experience.  The organizers did an amazing job delivering a alot of good information along with some great presentations.  However, information related to unit testing was a bit sparse.  Throughout the conference I met a few people and had some good discussions on this topic.  Considering my experience at the conference, and taking away what I have learned, I put together a small series of tutorials aimed at getting someone started on testing as well as some examples on unit testing Angular components.</p>
<p>The post <a rel="nofollow" href="https://veracitysolutions.com/community-blog/angular-unit-testing">Angular Unit Testing</a> appeared first on <a rel="nofollow" href="https://veracitysolutions.com">Veracity Solutions</a>.</p>
]]></description>
								<content:encoded><![CDATA[<div      class="vc_row wpb_row section vc_row-fluid " style=' text-align:left;'><div class=" full_section_inner clearfix"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>Attending the NG Conf in 2018 was quite an experience.  The organizers did an amazing job delivering a alot of good information along with some great presentations.  However, information related to unit testing was a bit sparse.  Throughout the conference I met a few people and had some good discussions on this topic.  Considering my experience at the conference, and taking away what I have learned, I put together a small series of tutorials aimed at getting someone started on testing as well as some examples on unit testing Angular components.  Let’s get started:</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<h3>Installing Angular CLI</h3>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>1. Download and install npm from <a href="https://www.npmjs.com/get-npm">here</a></p>
<p>2. Create a folder for a new project</p>
<p>ex: “C:\proj\tutorials\unittests”</p>
<p>3. Open a command prompt and go to that folder</p>
<pre>cd “C:\proj\tutorials\unittests”

4. Type this command to install the latest version of the CLI</pre>
<pre>npm install -g @angular/cli

<img class="alignnone size-medium wp-image-19505" src="https://veracitysolutions.com/wp-content/uploads/2019/01/1-300x58.png" alt="" width="300" height="58" srcset="https://veracitysolutions.com/wp-content/uploads/2019/01/1-300x58.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/01/1-768x148.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/01/1-700x135.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/01/1.png 881w" sizes="(max-width: 300px) 100vw, 300px" />

5. Create your new project, e.g. “angular-testing”</pre>
<pre>ng new angular-testing

<img class="alignnone size-medium wp-image-19506" src="https://veracitysolutions.com/wp-content/uploads/2019/01/2-300x48.png" alt="" width="300" height="48" srcset="https://veracitysolutions.com/wp-content/uploads/2019/01/2-300x48.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/01/2-768x122.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/01/2-800x128.png 800w, https://veracitysolutions.com/wp-content/uploads/2019/01/2-700x111.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/01/2.png 808w" sizes="(max-width: 300px) 100vw, 300px" />
</pre>
<p>This will create the project and install all the dependencies needed to create tests.</p>
<p><img class="alignnone size-medium wp-image-19507" src="https://veracitysolutions.com/wp-content/uploads/2019/01/3-300x219.png" alt="" width="300" height="219" srcset="https://veracitysolutions.com/wp-content/uploads/2019/01/3-300x219.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/01/3-768x560.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/01/3-700x510.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/01/3.png 819w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>In command window, make sure you are in the project directory</p>
<p><img class="alignnone size-medium wp-image-19508" src="https://veracitysolutions.com/wp-content/uploads/2019/01/4-300x61.png" alt="" width="300" height="61" srcset="https://veracitysolutions.com/wp-content/uploads/2019/01/4-300x61.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/01/4-768x157.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/01/4-700x143.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/01/4.png 790w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>6. Run the ng serve command to test the install and you should see that the code compiled</p>
<pre>ng serve -o

<img class="alignnone size-medium wp-image-19511" src="https://veracitysolutions.com/wp-content/uploads/2019/01/5-1-300x88.png" alt="" width="300" height="88" srcset="https://veracitysolutions.com/wp-content/uploads/2019/01/5-1-300x88.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/01/5-1-768x225.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/01/5-1-1024x300.png 1024w, https://veracitysolutions.com/wp-content/uploads/2019/01/5-1-700x205.png 700w" sizes="(max-width: 300px) 100vw, 300px" /></pre>
<p>A browser should open with the basic Angular app</p>
<p><img class="alignnone size-medium wp-image-19510" src="https://veracitysolutions.com/wp-content/uploads/2019/01/6-300x298.png" alt="" width="300" height="298" srcset="https://veracitysolutions.com/wp-content/uploads/2019/01/6-300x298.png 300w, https://veracitysolutions.com/wp-content/uploads/2019/01/6-150x150.png 150w, https://veracitysolutions.com/wp-content/uploads/2019/01/6-768x763.png 768w, https://veracitysolutions.com/wp-content/uploads/2019/01/6-1024x1017.png 1024w, https://veracitysolutions.com/wp-content/uploads/2019/01/6-700x695.png 700w, https://veracitysolutions.com/wp-content/uploads/2019/01/6.png 1148w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>That&#8217;s it!</p>
<h3>NPM</h3>
<p>Npm is the package manager for node.js.  It is used to help developers easily share package modules.</p>
<p><a href="https://www.npmjs.com/about">More information on npm</a></p>
<h3>Angular CLI</h3>
<p>Angular CLI is a command line interface for Angular.  It is used to create and maintain Angular applications.  When installing the Angular CLI, Jasmine and Karma are configured by default to use for testing.</p>
<p><a href="https://cli.angular.io/">More information on Angular CLI</a></p>
<h3>Jasmine</h3>
<p>Jasmine is an open source testing framework for JavaScript.  It does not come with a built-in test runner.</p>
<p><a href="https://jasmine.github.io/">More information on Jasmine</a></p>
<h3>Karma</h3>
<p>Karma is a JavaScript test runner that provides tools to work with Jasmine from the command line.  It will run in a browser and execute the Jasmine tests.  The results of the test will show in the command window as well as the browser.</p>
<p><a href="https://karma-runner.github.io/2.0/index.html">More information on Karma</a></p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>

</div></div></div></div></div>
<p>The post <a rel="nofollow" href="https://veracitysolutions.com/community-blog/angular-unit-testing">Angular Unit Testing</a> appeared first on <a rel="nofollow" href="https://veracitysolutions.com">Veracity Solutions</a>.</p>
]]></content:encoded>
							<wfw:commentRss>https://veracitysolutions.com/community-blog/angular-unit-testing/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>Veracity Solutions Appoints John Esser CEO And President</title>
		<link>https://veracitysolutions.com/news/veracity-solutions-appoints-john-esser-ceo-and-president</link>
				<comments>https://veracitysolutions.com/news/veracity-solutions-appoints-john-esser-ceo-and-president#respond</comments>
				<pubDate>Thu, 29 Nov 2018 16:40:14 +0000</pubDate>
		<dc:creator><![CDATA[Veracity Solutions]]></dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">https://www.veracitysolutions.com/?p=19384</guid>
				<description><![CDATA[<p>Former Ancestry.com &#038; AdvancedMD Transformation Leader to steer Veracity Solutions through next phase of aggressive growth</p>
<p>The post <a rel="nofollow" href="https://veracitysolutions.com/news/veracity-solutions-appoints-john-esser-ceo-and-president">Veracity Solutions Appoints John Esser CEO And President</a> appeared first on <a rel="nofollow" href="https://veracitysolutions.com">Veracity Solutions</a>.</p>
]]></description>
								<content:encoded><![CDATA[<div      class="vc_row wpb_row section vc_row-fluid " style=' text-align:left;'><div class=" full_section_inner clearfix"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p><em>Former Ancestry.com &amp; AdvancedMD Transformation Leader to steer Veracity Solutions through next phase of aggressive growth</em></p>
<p><em>Salt Lake City, November 29, 2018:</em> Veracity Solutions, technology consultant leader, today announced the appointment of <a href="https://www.linkedin.com/in/johnesser/">John Esser</a> as Chief Executive Officer and President. The appointment comes on the back of another strong year in which the company is making great strides and is rapidly approaching it’s highest revenue in company history.</p>
<p>Esser, the former transformation leader for multiple large tech companies, is a seasoned leader with a proven record of taking technology companies to the next level by accelerating their innovation, operational capability, and growth.</p>
<p>&#8220;I have admired and worked alongside John for 6 years, and am thrilled to see Veracity continue to grow under his leadership,&#8221; said Galen Murdock, Founder &amp; Chairman of the Board for Veracity Solutions. &#8220;He is a man of integrity, a creative technology executive, and is deeply respected by his peers and the entire industry. Our clients and consultants are in masterful hands.&#8221;</p>
<p>As the transformation leader at Ancestry, John evangelized and led a pivotal DevOps transformation which ultimately resulted in a continuous delivery process going from 1 deployment every two weeks to dozens of deployments per day. At AdvancedMD, John introduced DevOps processes and tools to improve operations efficiency, as well as overhauling and modernizing SaaS operations.</p>
<p>Esser has held additional high-profile positions throughout his career. He served as a Cloud Evangelist and Migration Leader architecting and leading two all-in migrations to AWS.  Additionally, he served as an Agile coach leading the comprehensive and massive agile transformation of Ancestry.</p>
<p>In addition to his career experience, Esser is a known thought leader in the DevOps community and has spoken and keynoted at numerous conferences (Agile 20xx, Gartner, DevOps Enterprise Summit, QCon, AWS reInvent, ChefConf, and DevOpsDays) and is a co-founder of the FlowCon conference.  His work as also been featured in numerous whitepapers and case studies.</p>
<p>&nbsp;</p>
<p>About Veracity Solutions</p>
<p>Founded in 1998, Veracity Solutions helps organizations plan, build and launch successful software solutions from conception through adoption. Companies solve their stubborn and unique problems at the core by relying on our expert advice, coaching, and staff. We can help you solve your critical business goals and lift your team in the process.</p>

		</div> 
	</div> </div></div></div></div></div>
<p>The post <a rel="nofollow" href="https://veracitysolutions.com/news/veracity-solutions-appoints-john-esser-ceo-and-president">Veracity Solutions Appoints John Esser CEO And President</a> appeared first on <a rel="nofollow" href="https://veracitysolutions.com">Veracity Solutions</a>.</p>
]]></content:encoded>
							<wfw:commentRss>https://veracitysolutions.com/news/veracity-solutions-appoints-john-esser-ceo-and-president/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>## Who moved my ngModel?</title>
		<link>https://veracitysolutions.com/community-blog/who-moved-my-ngmodel</link>
				<comments>https://veracitysolutions.com/community-blog/who-moved-my-ngmodel#respond</comments>
				<pubDate>Fri, 02 Nov 2018 16:24:07 +0000</pubDate>
		<dc:creator><![CDATA[Joel Richman]]></dc:creator>
				<category><![CDATA[Community Blog]]></category>

		<guid isPermaLink="false">https://www.veracitysolutions.com/?p=19272</guid>
				<description><![CDATA[<p>One of the great features introduced in AngularJS 1.x was two-way data binding. It was easy to add a ngModel attribute to an input and have that element be directly bound to a property on a JSON object. It was also just as easy to create a new UI element through a directive or component and model-bind it using ngModel and have the model binding pass from parent to child. Then Angular (2+) came along and changed everything with a whole new method for databinding controls and components.</p>
<p>The post <a rel="nofollow" href="https://veracitysolutions.com/community-blog/who-moved-my-ngmodel">## Who moved my ngModel?</a> appeared first on <a rel="nofollow" href="https://veracitysolutions.com">Veracity Solutions</a>.</p>
]]></description>
								<content:encoded><![CDATA[<div      class="vc_row wpb_row section vc_row-fluid " style=' text-align:left;'><div class=" full_section_inner clearfix"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>One of the great features introduced in AngularJS 1.x was two-way data binding. It was easy to add a ngModel attribute to an input and have that element be directly bound to a property on a JSON object. It was also just as easy to create a new UI element through a directive or component and model-bind it using ngModel and have the model binding pass from parent to child. Then Angular (2+) came along and changed everything with a whole new method for databinding controls and components.</p>
<p>Databinding is still a core part of Angular and ngModel still plays its part. But if you want to create a custom component that can databind using ngModel or it&#8217;s reactive form counterpart formControlName, there are a few more steps.</p>
<p>All of the code is available on my [Github Repo](<a href="https://github.com/JoelRichman/angular-data-bindable-component">https://github.com/JoelRichman/angular-data-bindable-component</a>)</p>
<p>My business case in this example is a dropdown that populates from an API call that can be reused in multiple places and is data bindable.</p>
<p>We&#8217;ll start with a scratch Angular project created using the `ng New` method from the Angular CLI. Next, we&#8217;ll create our reusable dropdown component.</p>
<p>ng g component dropdown</p>
<p>There is now a folder called drop-down with the files for the new dropdown.component. I modified the template property to be a select element. For now, we will populate this select from an array. I&#8217;ve stripped out the constructor and onInit, which are not needed at this time.</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>

</div></div></div></div></div><div      class="vc_row wpb_row section vc_row-fluid " style=' text-align:left;'><div class=" full_section_inner clearfix"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<pre class="EnlighterJSRAW" data-enlighter-language="null">import { Component } from '@angular/core';

    @Component({
      selector: 'app-dropdown',
      template: `
          &lt;select&gt;
          &lt;option *ngFor="let item of items" [value]="item.id" [selected]="item.id == value"&gt;{{ item.name }}&lt;/option&gt;
                {{ item.name }}
            &lt;/option&gt;
          &lt;/select&gt;
      `
    })
    export class DropdownComponent {
      items = [
        { id: 1, name: 'item 1' },
        { id: 2, name: 'item 2' },
        { id: 3, name: 'item 3' },
      ];
    }</pre>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>

</div></div></div></div></div><div      class="vc_row wpb_row section vc_row-fluid " style=' text-align:left;'><div class=" full_section_inner clearfix"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>Let&#8217;s tackle making this component data bindable. We will need to implement the interface `ControlValueAccessor` from the &#8216;@angular/forms&#8217; library. Let&#8217;s add that to the class declaration:</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<pre class="EnlighterJSRAW" data-enlighter-language="null">`export class DropdownComponent implements ControlValueAccessor {`</pre>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>Now we need to implement the interface. The hosting component needs a way to communicate a value to our component. For this, we will need to add a local variable to contain this value and a writeValue method to assign it. The value can be any type, in this case, I will be using a number to represent the Id of the selected item in the drop-down.</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<pre class="EnlighterJSRAW" data-enlighter-language="null">value: Number;

writeValue(value) {
  this.value = value;
}</pre>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>Next, we need a way to send that value back to the host. For that, we will need an onChange property that takes a function and a registerOnChange function that will allow the consumer to register the change event.</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<pre class="EnlighterJSRAW" data-enlighter-language="null">onChange = (number?: Number) =&gt; {}
registerOnChange(fn: (number: Number) =&gt; void): void {
  this.onChange = fn;
}</pre>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>Since Angular forms also notify changes for controls that have been touched, we need to implement methods for that as well.</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<pre class="EnlighterJSRAW" data-enlighter-language="null">onTouched = () =&gt; {};
registerOnTouched(fn: () =&gt; void): void {
  this.onTouched = fn;
}</pre>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>That fulfills the requirement of the interface, however we do need a way to update our local value variable and call the onChange method. So I will add one more method:</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<pre class="EnlighterJSRAW" data-enlighter-language="null">    onValueChange(value: number) {
      this.value = value;
      this.onChange(this.value);
    }</pre>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>We will bind this to the change event of the select control:</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<pre class="EnlighterJSRAW" data-enlighter-language="null">&lt;select (change)="onValueChange($event.target.value)"&gt;</pre>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>The final piece of the puzzle is to add a provider for this data bindable component. We will add the provider above the component declaration.</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<pre class="EnlighterJSRAW" data-enlighter-language="null">export const DROPDOWN_VALUE_ACCESSOR =  {
  provide: NG_VALUE_ACCESSOR,
  useExisting: forwardRef(() =&gt; DropdownComponent),
  multi: true
};</pre>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>and include it in the providers property:</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<pre class="EnlighterJSRAW" data-enlighter-language="null">providers: [DROPDOWN_VALUE_ACCESSOR]</pre>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<pre>The final component looks like this:</pre>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<pre class="EnlighterJSRAW" data-enlighter-language="null">import { Component, forwardRef } from '@angular/core';
   import { ControlValueAccessor, NG_VALUE_ACCESSOR, } from '@angular/forms';

   export const DROPDOWN_VALUE_ACCESSOR =  {
     provide: NG_VALUE_ACCESSOR,
     useExisting: forwardRef(() =&gt; DropdownComponent),
     multi: true
   };

   @Component({
     selector: 'app-dropdown',
     template: `
       &lt;select (change)="onValueChange($event.target.value)"&gt;
         &lt;option *ngFor="let item of items" [value]="item.id" [selected]="item.id == value"&gt;{{ item.name }}&lt;/option&gt;
       &lt;/select&gt;
     `,
     providers: [DROPDOWN_VALUE_ACCESSOR]
   })
   export class DropdownComponent implements ControlValueAccessor {

     items = [
       { id: 1, name: 'item 1' },
       { id: 2, name: 'item 2' },
       { id: 3, name: 'item 3' },
     ];

     // local variable to store the value of the control
     value: number;

     // Accept an incoming value from the data binding source
     writeValue(value) {
       this.value = value;
     }

     // Function to call when the control value changes.
     // Allow a consumer to register an on change function
     onChange = (number?: Number) =&gt; {};
     registerOnChange(fn: (number: Number) =&gt; void): void {
       this.onChange = fn;
     }

     // Function to call when the control is touched
     // Allows a consumer to register an on touched function
     onTouched = () =&gt; {};
     registerOnTouched(fn: () =&gt; void): void {
       this.onTouched = fn;
     }

     // Update the local value and notify the parent
     onValueChange(value: number) {
       this.value = value;
       this.onChange(this.value);
     }
   }</pre>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<pre>Let's implement this on a form and see how it works. 
Open up the app.component file.  Replace the content in the template property with the dropdown component.  
We'll also need a value property on our component to bind to.</pre>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<pre class="EnlighterJSRAW" data-enlighter-language="null">import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  template: `
    &lt;app-dropdown [(ngModel)]="value"&gt;&lt;/app-dropdown&gt;
    &lt;div&gt;
      selected value: {{ value }}
    &lt;/div&gt;
  `,
  styles: []
})
export class AppComponent {
  value = 1;
}</pre>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>Let&#8217;s run the app and check out our work thus far.</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<pre class="EnlighterJSRAW" data-enlighter-language="null">`ng serve`</pre>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>Open the browser of choice and load http://localhost:4200. Try changing the dropdown, you should see the selected value change as well.</p>
<p>That is all that is needed to implement model binding on a component. This method works with template driven forms using ngModel and reactive forms using formControlName. This will fulfill most needs of creating reusable components. The rest of this post will be devoted to scaffolding out an implementation to populate the list from a service. This will fulfill the need for making this component reusable in a multitude of other components.</p>
<p>Let&#8217;s create our list API service. Run the cli command to create the service:</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<pre class="EnlighterJSRAW" data-enlighter-language="null">`ng g service listApi`</pre>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>Typically in this type of service, I would add a reference to httpClient. For the sake of the demonstration, I&#8217;m going to mock the response and return it as an Observable. This way, I can consume it in my component the same as if I had made the API call.</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<pre class="EnlighterJSRAW" data-enlighter-language="null">import { Injectable } from '@angular/core';
import { Observable, of } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class ListApiService {

  lists = {
    'list1': [
      { id: 1, name: 'item 1' },
      { id: 2, name: 'item 2' },
      { id: 3, name: 'item 3' }
    ],
    'list2': [
      { id: 4, name: 'item 4' },
      { id: 5, name: 'item 5' },
      { id: 6, name: 'item 6' }
    ]
  };

  constructor() { }

  public getList(key: string): Observable&lt;any&gt; {
    return of(this.lists[key]);
  }
}</pre>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>Notice that I&#8217;m returning an observable result using the `of` operator. This allows me to subscribe to the return the same way as an HTTP call. I will then modify the drop-down component to inject the listApiService in the constructor.</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<pre class="EnlighterJSRAW" data-enlighter-language="null">constructor(private listApi: ListApiService) {}</pre>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>We also need a way to indicate which list we would like to retrieve. For that, we will add an Input.</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<pre class="EnlighterJSRAW" data-enlighter-language="null">@Input() list: string;</pre>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>We will need to watch when the list input changes to know when to make our API call and retrieve the list. For that we will use the ngOnChanges event. I will also remove the hard-coded list of items.</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<pre class="EnlighterJSRAW" data-enlighter-language="null">ngOnChanges() {
  this.listApi
    .getList(this.list)
    .subscribe(listValues =&gt; this.items = listValues);
}</pre>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>The final component looks like this:</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<pre class="EnlighterJSRAW" data-enlighter-language="null">import { Component, forwardRef, Input, OnChanges } from '@angular/core';
import { ControlValueAccessor, NG_VALUE_ACCESSOR, } from '@angular/forms';
import { ListApiService } from '../list-api.service';

export const DROPDOWN_VALUE_ACCESSOR =  {
  provide: NG_VALUE_ACCESSOR,
  useExisting: forwardRef(() =&gt; DropdownComponent),
  multi: true
};

@Component({
  selector: 'app-dropdown',
  template: `
    &lt;select (change)="onValueChange($event.target.value)"&gt;
      &lt;option *ngFor="let item of items" [value]="item.id" [selected]="item.id == value"&gt;{{ item.name }}&lt;/option&gt;
    &lt;/select&gt;
  `,
  providers: [DROPDOWN_VALUE_ACCESSOR]
})
export class DropdownComponent implements ControlValueAccessor, OnChanges {

  @Input() list: string;

  items = [];

  // local variable to store the value of the control
  value: number;

  constructor(private listApi: ListApiService) {}

  ngOnChanges() {
    this.listApi
      .getList(this.list)
      .subscribe(listValues =&gt; this.items = listValues);
  }

  // Accept an incoming value from the data binding source
  writeValue(value) {
    this.value = value;
  }

  // Function to call when the control value changes.
  // Allow a consumer to register an on change function
  onChange = (number?: Number) =&gt; {};
  registerOnChange(fn: (number: Number) =&gt; void): void {
    this.onChange = fn;
  }

  // Function to call when the control is touched
  // Allows a consumer to register an on touched function
  onTouched = () =&gt; {};
  registerOnTouched(fn: () =&gt; void): void {
    this.onTouched = fn;
  }

  // Update the local value and notify the parent
  onValueChange(value: number) {
    this.value = value;
    this.onChange(this.value);
  }
}</pre>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>Lastly, we will update the implementation of the dropdown component in our app component to utilize the list input. I&#8217;ve added the second select to demonstrate loading multiple copies of the component with different dropdown lists and separate data bindings.</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<pre class="EnlighterJSRAW" data-enlighter-language="null">import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  template: `
    &lt;app-dropdown [(ngModel)]="value" [list]="'list1'"&gt;&lt;/app-dropdown&gt;
    &lt;app-dropdown [(ngModel)]="value2" [list]="'list2'"&gt;&lt;/app-dropdown&gt;
    &lt;div&gt;
      selected value: {{ value }}
    &lt;/div&gt;
    &lt;div&gt;
      selected value 2: {{ value2 }}
    &lt;/div&gt;
  `,
  styles: []
})
export class AppComponent {
  value = 0;
  value2 = 0;
}</pre>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>This completes the objective. The implementation of ngModel in AngularJS was block box. It was easy to use in simple applications when requirements became more complex, it was much harder to modify the behavior. The Angular implementation does require more code to implement, it is much more configurable to individual use cases. We have clear access to the change pipeline and can modify as needed.</p>

		</div> 
	</div> </div></div></div></div></div>
<p>The post <a rel="nofollow" href="https://veracitysolutions.com/community-blog/who-moved-my-ngmodel">## Who moved my ngModel?</a> appeared first on <a rel="nofollow" href="https://veracitysolutions.com">Veracity Solutions</a>.</p>
]]></content:encoded>
							<wfw:commentRss>https://veracitysolutions.com/community-blog/who-moved-my-ngmodel/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>Jump right in: How to introduce agile through hands-on learning</title>
		<link>https://veracitysolutions.com/blog/jump-right-in-how-to-introduce-agile-through-hands-on-learning</link>
				<comments>https://veracitysolutions.com/blog/jump-right-in-how-to-introduce-agile-through-hands-on-learning#respond</comments>
				<pubDate>Tue, 30 Oct 2018 08:00:44 +0000</pubDate>
		<dc:creator><![CDATA[Veracity Solutions]]></dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[stage 2]]></category>

		<guid isPermaLink="false">https://www.veracitysolutions.com/?p=19234</guid>
				<description><![CDATA[<p>‘We should be doing agile, right?’<br />
Developers are naturally drawn to the idea of agile development. Speedy delivery cycles, with less planning and documentation...</p>
<p>The post <a rel="nofollow" href="https://veracitysolutions.com/blog/jump-right-in-how-to-introduce-agile-through-hands-on-learning">Jump right in: How to introduce agile through hands-on learning</a> appeared first on <a rel="nofollow" href="https://veracitysolutions.com">Veracity Solutions</a>.</p>
]]></description>
								<content:encoded><![CDATA[<div      class="vc_row wpb_row section vc_row-fluid " style=' text-align:left;'><div class=" full_section_inner clearfix"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>‘We should be doing agile, right?’</p>
<p>Developers are naturally drawn to the idea of agile development. Speedy delivery cycles, with less planning and documentation&#8230;what’s not to like? Well, for starters, there’s the disconnect between theory and implementation when undergoing an agile transformation. Some organizations have a solid understanding of agile principles but can’t apply them. This can lead to uncertainty and skepticism about agile ideas.</p>
<p>To combat this, Veracity has found some success with a ‘delayed boot camp’. In this model, in-depth about agile training comes later in the agile transformation process. Usually, it’s after they’ve attempted a couple of agile sprints. This ‘learn by doing’ approach might sound counter-intuitive, but hey, stick with us.</p>
<p><strong>Focus on the product, not the process</strong></p>
<p>The beginning isn’t always the best place for an introduction. Development teams typically start their agile transformation with an agile boot camp or ‘agile 101’ session. There, everyone learns agile theory over a couple of days. After a PT planning or ‘Sprint 0’ exercise, the sprints begin…and sometimes sputter out. If you’ve been in agile development long enough, this might start to sound familiar.</p>
<p>Veracity found the problem was these early boot camps emphasized the process over the output. Vocal skeptics (we all know one), would distract the class and instructors found themselves wasting time wading through ultra-specific questions. The goal of software development should be to create high-quality value, faster. If that’s our destination, we can’t be too distracted nailing down the exact way to get there. We just have to get there.</p>
<p><strong>Get everyone on the same page</strong></p>
<p>The delayed boot camp model helps development teams stay focused on their product output. It starts with an inception and alignment exercise. At Veracity, this ‘I&amp;A’ exercise is a two-day planning process with key stakeholders. These can be organizational leaders, the development team, even marketing and sales staff. Everyone should be on board with the agile transformation. The development team leaves the exercise with a release plan – and just enough background information about agile development needed to follow it. Then, it’s time to attempt a couple sprints before reuniting for the delayed boot camp.</p>
<p>The tailored I&amp;A exercise helps get your team excited about your agile transformation. Why? Because it keeps the focus on application and output. Your team isn’t hyper-focused on becoming experts in agile development theory. They’re ready to build deliver value in the form of a superior product. And use agile as a tool to do it.</p>
<p><strong>Regroup and dive in</strong></p>
<p>When it’s time for the delayed boot camp (after about two sprints), your team can practice agile using real-life examples from their current projects. This can help reduce downtime and thwart would-be agile skeptics. Where traditional boot camps have struggled through hypothetical examples, your team can continue its hands-on learning.</p>
<p>Your team might not have found loads of success in their pre-boot camp sprints – and that’s ok! This is where experiential learning comes into play. Some aspects of agile will have clicked, others will be more challenging. But, because they’ll have already tried agile on their own. And we’ve found that means they’ll arrive at the boot camp ready to learn and with relevant, useful questions.</p>
<p><strong>Keep moving forward</strong></p>
<p>Life rarely gives us any ‘silver bullet’ solutions, and the delayed boot camp model is no exception. Agile transformations are challenging! Many organizations do find traditional boot camps to be effective. As with any shift within an organization, it’s important to remain flexible and positive as challenges arise. And it doesn’t hurt to celebrate small successes, especially early on. Stay positive, focus on the output, and find the agile process along the way.</p>
<p>Veracity specializes in helping organizations conceptualize, design, and build effective software. We believe that, by prioritizing planning early in the launch process, we can reduce time and energy wasted at the later stages. For more information, we’ve published an eGuide to help with your agile transformation. To get it, click here!</p>

		</div> 
	</div> </div></div></div></div></div>
<p>The post <a rel="nofollow" href="https://veracitysolutions.com/blog/jump-right-in-how-to-introduce-agile-through-hands-on-learning">Jump right in: How to introduce agile through hands-on learning</a> appeared first on <a rel="nofollow" href="https://veracitysolutions.com">Veracity Solutions</a>.</p>
]]></content:encoded>
							<wfw:commentRss>https://veracitysolutions.com/blog/jump-right-in-how-to-introduce-agile-through-hands-on-learning/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>INC 5000 List, we&#8217;re back!</title>
		<link>https://veracitysolutions.com/news/ceos-corner-inc-5000</link>
				<comments>https://veracitysolutions.com/news/ceos-corner-inc-5000#respond</comments>
				<pubDate>Thu, 30 Aug 2018 19:34:48 +0000</pubDate>
		<dc:creator><![CDATA[Marva Sadler]]></dc:creator>
				<category><![CDATA[CEO's Corner]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">https://www.veracitysolutions.com/?p=18432</guid>
				<description><![CDATA[<p>We just received news that Veracity is on the INC 5000 list again this year!<br />
This is our sixth year on the INC 5000, which puts us in a pretty exclusive group. But even better, it’s tremendously gratifying to be back, after a couple of years hiatus.</p>
<p>The post <a rel="nofollow" href="https://veracitysolutions.com/news/ceos-corner-inc-5000">INC 5000 List, we&#8217;re back!</a> appeared first on <a rel="nofollow" href="https://veracitysolutions.com">Veracity Solutions</a>.</p>
]]></description>
								<content:encoded><![CDATA[<div      class="vc_row wpb_row section vc_row-fluid " style=' text-align:left;'><div class=" full_section_inner clearfix"><div class="wpb_column vc_column_container vc_col-sm-3"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_single_image wpb_content_element vc_align_left">
		<div class="wpb_wrapper">
			
			<div class="vc_single_image-wrapper   vc_box_border_grey"><img width="150" height="150" src="https://veracitysolutions.com/wp-content/uploads/2017/03/Marva-e1455664104363-150x150.jpg" class="vc_single_image-img attachment-thumbnail" alt="" srcset="https://veracitysolutions.com/wp-content/uploads/2017/03/Marva-e1455664104363-150x150.jpg 150w, https://veracitysolutions.com/wp-content/uploads/2017/03/Marva-e1455664104363-300x300.jpg 300w, https://veracitysolutions.com/wp-content/uploads/2017/03/Marva-e1455664104363.jpg 400w" sizes="(max-width: 150px) 100vw, 150px" /></div>
		</div>
	</div>
</div></div></div><div class="wpb_column vc_column_container vc_col-sm-9"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>We just received news that Veracity is on the INC 5000 list again this year!</p>
<p>This is our sixth year on the INC 5000, which puts us in a pretty exclusive group. But even better, it’s tremendously gratifying to be back, after a couple of years hiatus.</p>

		</div> 
	</div> </div></div></div></div></div><div      class="vc_row wpb_row section vc_row-fluid " style=' text-align:left;'><div class=" full_section_inner clearfix"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>We’re excited by the recognition, and even more by the growth it represents. I know, it’s a list that recognizes high growth companies. But I’m talking about more than revenue growth. Revenue growth is the result of tremendous organizational and professional growth the entire team has experienced as we moved from being a well-run family organization to a company run by a highly experienced and energized leadership team.</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>See official <a href="https://veracitysolutions.com/wp-content/uploads/2018/09/2018-Inc.-5000-Honoree-Press-Release.pdf">2018 INC 5000 Press Release</a> here.</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>In the past year we’ve honed our messaging and clarified our value proposition. We’ve presented at important regional events, attracting both leading consultants, and new clients to our circle of influence. We’ve attracted experts in big data, product management, architecture, agile, and dev ops.  We’ve added new cutting-edge consultative approaches and improved several of our “tried and true” methodologies.  In short, we’ve experienced tremendous internal growth, that’s resulted in significant revenue growth.</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>Please join me in congratulating the entire Veracity Team for a tremendous year, and a bright future ahead.</p>

		</div> 
	</div> </div></div></div></div></div>
<p>The post <a rel="nofollow" href="https://veracitysolutions.com/news/ceos-corner-inc-5000">INC 5000 List, we&#8217;re back!</a> appeared first on <a rel="nofollow" href="https://veracitysolutions.com">Veracity Solutions</a>.</p>
]]></content:encoded>
							<wfw:commentRss>https://veracitysolutions.com/news/ceos-corner-inc-5000/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>Launch Continuum: Moving off the pain, finding the root cause</title>
		<link>https://veracitysolutions.com/blog/launch-continuum-moving-off-the-pain-finding-the-root-cause</link>
				<comments>https://veracitysolutions.com/blog/launch-continuum-moving-off-the-pain-finding-the-root-cause#respond</comments>
				<pubDate>Thu, 12 Jul 2018 08:00:09 +0000</pubDate>
		<dc:creator><![CDATA[Veracity Solutions]]></dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[stage 4]]></category>

		<guid isPermaLink="false">https://www.veracitysolutions.com/?p=18175</guid>
				<description><![CDATA[<p>Just about any company that builds software, whether the intended end user is external or internal, will face a development cycle requiring their teams to strategize, plan, develop, launch and adopt. We call this cycle the Launch Continuum.</p>
<p>The post <a rel="nofollow" href="https://veracitysolutions.com/blog/launch-continuum-moving-off-the-pain-finding-the-root-cause">Launch Continuum: Moving off the pain, finding the root cause</a> appeared first on <a rel="nofollow" href="https://veracitysolutions.com">Veracity Solutions</a>.</p>
]]></description>
								<content:encoded><![CDATA[<div      class="vc_row wpb_row section vc_row-fluid " style=' text-align:left;'><div class=" full_section_inner clearfix"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>Challenges? What challenges? Said no one ever when building &amp; releasing software.</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>Just about any company that builds software, whether the intended end user is external or internal, will face a development cycle requiring their teams to strategize, plan, develop, launch and adopt. We call this cycle the Launch Continuum.</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 32px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_single_image wpb_content_element vc_align_center">
		<div class="wpb_wrapper">
			
			<div class="vc_single_image-wrapper   vc_box_border_grey"><img width="300" height="297" src="https://veracitysolutions.com/wp-content/uploads/2018/06/Software-Launch-Continuum-300x297.png" class="vc_single_image-img attachment-medium" alt="" srcset="https://veracitysolutions.com/wp-content/uploads/2018/06/Software-Launch-Continuum-300x297.png 300w, https://veracitysolutions.com/wp-content/uploads/2018/06/Software-Launch-Continuum-150x150.png 150w, https://veracitysolutions.com/wp-content/uploads/2018/06/Software-Launch-Continuum-768x759.png 768w, https://veracitysolutions.com/wp-content/uploads/2018/06/Software-Launch-Continuum-1024x1013.png 1024w, https://veracitysolutions.com/wp-content/uploads/2018/06/Software-Launch-Continuum-700x692.png 700w, https://veracitysolutions.com/wp-content/uploads/2018/06/Software-Launch-Continuum.png 1161w" sizes="(max-width: 300px) 100vw, 300px" /></div>
		</div>
	</div>
	<div class="vc_empty_space"  style="height: 32px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>Across the phases of the Launch Continuum, we as builders of software see our strengths, and core competencies thrive, while many of our weaknesses express themselves as pains we might feel throughout our launch cycle. Initially, our most basic instinct and internal WebMD tells us to treat that pain immediately, many of us fail to dig deeper and find out what&#8217;s actually causing that pain. At Veracity Solutions we have developed a simple do it yourself assessment to help steer you towards asking the right questions and uncovering the root causes of your development pains.</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 32px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>

<a  itemprop="url" href="https://veracitysolutions.com/assessment/?cl=veracityblog2018-07-12" target="_self" data-hover-border-color=#646569  class="qbutton  big_large_full_width center enlarge" style="border-color: #ffffff; background-color: #57c9e8;">Take the assessment now</a>	<div class="vc_empty_space"  style="height: 32px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<h2><strong>What pains do we feel when launching new or relaunching existing software products?</strong></h2>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>Okay, take a breath. We don&#8217;t intend to cover every pain you’ve ever felt over the expanse of your career, but consider this, have you felt those same pains before, with other software releases? Or have those pains followed you from a previous employer to the &#8220;greener pastures&#8221; of your current position? We&#8217;ve found that many of these pains are universal and are respecters of no one. So what are they and how are they felt? Well, a few examples are; early in the strategy and analysis stage, there may be too many priorities stacking up or a lack of market knowledge impeding the process. In the planning stage, we&#8217;ve witnessed companies that are stuck validating design/features, it’s common to see scope creep act as a major irritant in this stage too. Even the more obvious challenges within the development stage such as wasted development or development delays that are painful and costly can be traced to a specific root cause.</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<h2><strong>Root cause? Please explain.</strong></h2>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>So we mentioned some common challenges during the Launch Continuum. What are some of the common root causes for the given examples? When dealing with too many priorities we can drill down to a few root causes 1) lack of a prioritization process 2) inability to say no to a customer or 3) not enough information to make a clear decision. One or more of these root causes can drive the pain(s) felt downstream.</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<h2><strong>Magic bullet: Shoot it to me straight.</strong></h2>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>In all honesty, there isn&#8217;t a perfect solution to every launch challenge. Not all can or will be identified upfront; nor will they all be corrected at their root cause on the first attempt. Our data shows the most significant success comes from aligning on the most impactful challenges and working to solve their root causes through a coordinated effort in all functions.  This assessment can be used across departments, to help you identify and align on the most high-value pains to be resolved.</p>

		</div> 
	</div> 	<div class="vc_empty_space"  style="height: 32px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>

<a  itemprop="url" href="https://veracitysolutions.com/assessment/?cl=veracityblog2018-07-12" target="_self" data-hover-border-color=#646569  class="qbutton  big_large_full_width center enlarge" style="border-color: #ffffff; background-color: #57c9e8;">Take the assessment now</a>	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_single_image wpb_content_element vc_align_center">
		<div class="wpb_wrapper">
			
			<div class="vc_single_image-wrapper   vc_box_border_grey"><img width="1024" height="459" src="https://veracitysolutions.com/wp-content/uploads/2018/07/Artboard-1-copy-123-1024x459.png" class="vc_single_image-img attachment-large" alt="" srcset="https://veracitysolutions.com/wp-content/uploads/2018/07/Artboard-1-copy-123-1024x459.png 1024w, https://veracitysolutions.com/wp-content/uploads/2018/07/Artboard-1-copy-123-300x134.png 300w, https://veracitysolutions.com/wp-content/uploads/2018/07/Artboard-1-copy-123-768x344.png 768w, https://veracitysolutions.com/wp-content/uploads/2018/07/Artboard-1-copy-123-700x314.png 700w, https://veracitysolutions.com/wp-content/uploads/2018/07/Artboard-1-copy-123.png 1027w" sizes="(max-width: 1024px) 100vw, 1024px" /></div>
		</div>
	</div>
	<div class="vc_empty_space"  style="height: 16px" ><span
			class="vc_empty_space_inner">
			<span class="empty_space_image"  ></span>
		</span></div>


	<div class="wpb_text_column wpb_content_element ">
		<div class="wpb_wrapper">
			<p>Veracity Solutions helps organizations plan, build and launch successful software solutions from conception through adoption. Companies solve their stubborn and unique problems at the core by relying on our expert advice, coaching and staff. We can help you solve your critical business goals and lift your team in the process.</p>

		</div> 
	</div> </div></div></div></div></div><div      class="vc_row wpb_row section vc_row-fluid " style=' text-align:left;'><div class=" full_section_inner clearfix"><div class="wpb_column vc_column_container vc_col-sm-12"><div class="vc_column-inner"><div class="wpb_wrapper"></div></div></div></div></div>
<p>The post <a rel="nofollow" href="https://veracitysolutions.com/blog/launch-continuum-moving-off-the-pain-finding-the-root-cause">Launch Continuum: Moving off the pain, finding the root cause</a> appeared first on <a rel="nofollow" href="https://veracitysolutions.com">Veracity Solutions</a>.</p>
]]></content:encoded>
							<wfw:commentRss>https://veracitysolutions.com/blog/launch-continuum-moving-off-the-pain-finding-the-root-cause/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.w3-edge.com/products/

Object Caching 129/422 objects using disk
Page Caching using disk: enhanced (Page is feed) 
Minified using disk
Database Caching 4/52 queries in 0.037 seconds using disk (Request-wide modification query)

Served from: veracitysolutions.com @ 2019-07-09 21:16:26 by W3 Total Cache
-->