<?xml version="1.0"?>
<News hasArchived="true" page="8876" pageCount="10777" pageSize="10" timestamp="Sun, 30 Aug 2026 17:49:11 -0400" url="https://my3.my.umbc.edu/posts.xml?mode=activity&amp;page=8876">
<NewsItem contentIssues="false" id="28153" important="false" status="posted" url="https://my3.my.umbc.edu/posts/28153">
<Title>Review: Rapid SEO Tool</Title>
<Body>
<![CDATA[
    <div class="html-content"><p>In this article we look at the Rapid SEO Tool, which is designed to help you improve your search engine rankings. Properly applied, you'll see the rankings of your page and site over-all climb over time. And assuming you eventually arrive on page one for one or more pages, this could have a significant impact on your business.</p></div>
]]>
</Body>
<Summary>In this article we look at the Rapid SEO Tool, which is designed to help you improve your search engine rankings. Properly applied, you'll see the rankings of your page and site over-all climb...</Summary>
<Website>http://www.htmlgoodies.com/beyond/seo/review-rapid-seo-tool.html</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/28153/guest@my.umbc.edu/e9df77d98afcbbcf0559f17d402e9c56/api/pixel</TrackingUrl>
<Tag>html</Tag>
<Tag>htmlgoodies</Tag>
<Tag>learning</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Tue, 23 Apr 2013 22:47:00 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="28149" important="false" status="posted" url="https://my3.my.umbc.edu/posts/28149">
<Title>Quickstart: Adding WinJS controls and styles to a Windows Store app using JavaScript and HTML</Title>
<Body>
<![CDATA[
    <div class="html-content"><p>The Windows Library for JavaScript provides a set of new controls designed for Windows Store apps using JavaScript. It also includes two style sheets (one with a dark color scheme and one with a light) that give your app the look and feel of Windows 8. This Quickstart article will review the details and best practices behind leveraging these controls and styles.</p></div>
]]>
</Body>
<Summary>The Windows Library for JavaScript provides a set of new controls designed for Windows Store apps using JavaScript. It also includes two style sheets (one with a dark color scheme and one with a...</Summary>
<Website>http://www.htmlgoodies.com/HTML5/client/quickstart-adding-winjs-controls-and-styles-to-a-windows-store-app-using-javascript-and-html.html</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/28149/guest@my.umbc.edu/600fa9ea7fff08cc1364926474f70c84/api/pixel</TrackingUrl>
<Tag>html</Tag>
<Tag>htmlgoodies</Tag>
<Tag>learning</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Tue, 23 Apr 2013 19:00:00 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="30043" important="false" status="posted" url="https://my3.my.umbc.edu/posts/30043">
<Title>Preventing Misinformation from Spreading through Social Media</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>New platforms for fact-checking and reputation scoring aim to better channel social media’s power in the wake of a disaster.</p>
    <p>The online crowds weren’t always wise following the Boston Marathon bombings. For example, the online community Reddit and some Twitter users were criticized for pillorying an innocent student as a possible terrorist suspect. But some emerging technologies might be able to help knock down false reports and wring the truth from the fog of social media during crises.</p>
    </div>
]]>
</Body>
<Summary>New platforms for fact-checking and reputation scoring aim to better channel social media’s power in the wake of a disaster.  The online crowds weren’t always wise following the Boston Marathon...</Summary>
<Website>http://www.technologyreview.com/news/514056/preventing-misinformation-from-spreading-through-social-media/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/30043/guest@my.umbc.edu/d747bd4f87fc76485587d6fccb7b9dce/api/pixel</TrackingUrl>
<Tag>development</Tag>
<Tag>internet</Tag>
<Tag>mit</Tag>
<Tag>technology</Tag>
<Tag>web</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Tue, 23 Apr 2013 17:22:09 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="28143" important="false" status="posted" url="https://my3.my.umbc.edu/posts/28143">
<Title>TEKSystems (near campus) is hiring ECON/FIEC/ACCT students</Title>
<Tagline>$15.00 per hour this summer!!!</Tagline>
<Body>
<![CDATA[
    <div class="html-content">
    <p>To apply, visit UMBCworks and search for position number 9257789.<br></p>
    <p><span><em><strong><br></strong></em></span></p>
    <p><span><em><strong>Scope of Position:</strong></em><br></span></p>
    
    <p><span>Reporting to the MOS, the Business Operations Intern (BOI)
    is responsible for ensuring the highest level of customer service, to external
    customers as well as corporate and field office employees.<span>  </span>The BOI is proficient in the management and
    collection of customer accounts receivable.<span> 
    </span>Qualities include: Building customer relationships, conflict resolution,
    professionalism, <strong>detail oriented</strong>,
    strong follow-up skills, <strong>multi-tasking</strong>
    <strong>skills</strong>, the ability to use
    independent judgment, ability to function in an open environment, the ability
    to embrace the Allegis Group communication model as appropriate, and the
    ability to adapt to changes in the workplace.</span></p>
    
    <h2><span>Essential Functions of the Business
    Operations Intern:</span></h2>
    <ul>
    <li>
    <span><span></span></span><span>Management of customer accounts,
    including but not limited to invoicing, collections, PO tracking, customer
    service and working with client to resolve outstanding issues</span>
    
    </li>
    <li>
    <span><span></span></span><span>Making routine welcome and maintenance
    calls to clients</span>
    </li>
    <li>
    <span><span></span></span><span>Manage accounts receivable </span>
    </li>
    <li>
    <span><span></span></span><span>Support liaison for field offices and
    OSG with questions pertaining to those local/regional accounts on their aging
    including but not limited to client billing and payment policies and/or
    procedures, PeopleSoft issues, etc.</span>
    </li>
    <li>
    <span><span></span></span><span>Responsible for gathering the necessary
    data to assist Management with account specific decisions</span>
    </li>
    <li>
    <span><span></span></span><span>Auditing account specific reports to
    ensure accurate billing and client specific information </span>
    </li>
    <li>
    <span><span><span> </span></span></span><span>Assist Business Operations Associates
    and MOS with tasks and projects</span>
    </li>
    </ul>
    <span><br><em><strong>Qualifications:</strong></em></span>
    
    
    
    <ul>
    <li>
    <span><span></span></span><span>Currently enrolled in college seeking a
    BA/BS degree in economics, financial economics, accounting or a related field.<span>  </span>Junior or senior standing preferred</span>
    </li>
    <li>
    <span><span></span></span><span>Strong organizational and analytical
    abilities</span>
    </li>
    <li>
    <span><span></span></span><span>Strong communication skills and work
    ethic</span>
    </li>
    <li>
    <span><span></span></span><span>Goal driven with problem solving skills</span>
    </li>
    <li>
    <span><span></span></span><span>Proficient in Microsoft Office (Excel
    and Word a must)</span>
    </li>
    <li>
    <span><span></span></span><span>Ability to work independently and as a
    team player</span>
    </li>
    </ul>
    </div>
]]>
</Body>
<Summary>To apply, visit UMBCworks and search for position number 9257789.      Scope of Position:     Reporting to the MOS, the Business Operations Intern (BOI) is responsible for ensuring the highest...</Summary>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/28143/guest@my.umbc.edu/8eb5a2174709043d1432c2bc359bd6a4/api/pixel</TrackingUrl>
<Group token="shriver">The Shriver Center</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/shriver</GroupUrl>
<AvatarUrl>https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/008/0bfad113286cf6b1bc6dedbdbfc7e5ef/xsmall.png?1441293069</AvatarUrl>
<AvatarUrl size="original">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/008/0bfad113286cf6b1bc6dedbdbfc7e5ef/original.jpg?1441293069</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/008/0bfad113286cf6b1bc6dedbdbfc7e5ef/xxlarge.png?1441293069</AvatarUrl>
<AvatarUrl size="xlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/008/0bfad113286cf6b1bc6dedbdbfc7e5ef/xlarge.png?1441293069</AvatarUrl>
<AvatarUrl size="large">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/008/0bfad113286cf6b1bc6dedbdbfc7e5ef/large.png?1441293069</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/008/0bfad113286cf6b1bc6dedbdbfc7e5ef/medium.png?1441293069</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/008/0bfad113286cf6b1bc6dedbdbfc7e5ef/small.png?1441293069</AvatarUrl>
<AvatarUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/008/0bfad113286cf6b1bc6dedbdbfc7e5ef/xsmall.png?1441293069</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/008/0bfad113286cf6b1bc6dedbdbfc7e5ef/xxsmall.png?1441293069</AvatarUrl>
<Sponsor>Shriver Center:Intern, Co-op, Research &amp; Service-Learning</Sponsor>
<ThumbnailUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/028/143/ebbef3b7bea693ae9aa25f2885a828cc/xxlarge.jpg?1366748326</ThumbnailUrl>
<ThumbnailUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/028/143/ebbef3b7bea693ae9aa25f2885a828cc/xlarge.jpg?1366748326</ThumbnailUrl>
<ThumbnailUrl size="large">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/028/143/ebbef3b7bea693ae9aa25f2885a828cc/large.jpg?1366748326</ThumbnailUrl>
<ThumbnailUrl size="medium">https://assets1-my.umbc.edu/system/shared/thumbnails/news/000/028/143/ebbef3b7bea693ae9aa25f2885a828cc/medium.jpg?1366748326</ThumbnailUrl>
<ThumbnailUrl size="small">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/028/143/ebbef3b7bea693ae9aa25f2885a828cc/small.jpg?1366748326</ThumbnailUrl>
<ThumbnailUrl size="xsmall">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/028/143/ebbef3b7bea693ae9aa25f2885a828cc/xsmall.jpg?1366748326</ThumbnailUrl>
<ThumbnailUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/028/143/ebbef3b7bea693ae9aa25f2885a828cc/xxsmall.jpg?1366748326</ThumbnailUrl>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Tue, 23 Apr 2013 16:19:17 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="28145" important="false" status="posted" url="https://my3.my.umbc.edu/posts/28145">
<Title>Humans vs Zombies Update</Title>
<Body>
<![CDATA[
    <div class="html-content">Sorry about not having updated this in quite a while!<div><br></div>
    <div>I'd first like to welcome our new officers,</div>
    <div><br></div>
    <div>President Judah Marshall</div>
    <div>Vice President Katy McNeely</div>
    <div>Treasurer Frank Battaglino</div>
    <div>Secretary Michael Wu</div>
    <div>Advertising Danielle "Tank" Caldwell</div>
    <div>Webmaster Philip Phelps</div>
    <div><br></div>
    <div>Secondly,</div>
    <div><br></div>
    <div>Check out the new events I just posted! We are holding our 3rd annual invitational on Saturday, April 27th. Everyone is welcome to join in. Just show up ready to have some fun.</div>
    <div><br></div>
    <div>Our 4th weeklong game begins on April 29th. It is a compilation of everyone's favorite missions from this year!</div>
    <div><br></div>
    <div>Our next regular One Night game will be on May 6th, ITE 104.</div>
    <div><br></div>
    <div>If you have any questions please email <a href="mailto:umbchvzofficers@gmail.com">umbchvzofficers@gmail.com</a>
    </div>
    <div><br></div>
    <div><br></div>
    <div>-The HvZ Admins</div>
    </div>
]]>
</Body>
<Summary>Sorry about not having updated this in quite a while!    I'd first like to welcome our new officers,     President Judah Marshall  Vice President Katy McNeely  Treasurer Frank Battaglino...</Summary>
<Website>http://umbchvz.com</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/28145/guest@my.umbc.edu/09d630f413061c621ee209cfbc11cdbb/api/pixel</TrackingUrl>
<Group token="umbc-hvz">Humans vs. Zombies Club</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/umbc-hvz</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/063/251ac3d1e0619a1166fa15753157ea11/xsmall.png?1448229729</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/063/251ac3d1e0619a1166fa15753157ea11/original.png?1448229729</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/063/251ac3d1e0619a1166fa15753157ea11/xxlarge.png?1448229729</AvatarUrl>
<AvatarUrl size="xlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/063/251ac3d1e0619a1166fa15753157ea11/xlarge.png?1448229729</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/063/251ac3d1e0619a1166fa15753157ea11/large.png?1448229729</AvatarUrl>
<AvatarUrl size="medium">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/063/251ac3d1e0619a1166fa15753157ea11/medium.png?1448229729</AvatarUrl>
<AvatarUrl size="small">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/063/251ac3d1e0619a1166fa15753157ea11/small.png?1448229729</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/063/251ac3d1e0619a1166fa15753157ea11/xsmall.png?1448229729</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/063/251ac3d1e0619a1166fa15753157ea11/xxsmall.png?1448229729</AvatarUrl>
<Sponsor>UMBC Humans vs. Zombies</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Tue, 23 Apr 2013 16:17:52 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="30044" important="false" status="posted" url="https://my3.my.umbc.edu/posts/30044">
<Title>Software Predicts Which Companies Are an Easy Sell</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>A former Yahoo search engineer raises funds to bring sophisticated data mining and modeling to the business world.</p>
    <p>A startup called <a href="http://www.infer.com/" rel="nofollow external" class="bo">Infer</a>, led by a former Yahoo search engineer, plans to help salespeople identify potential business customers by gathering useful information from news sites and the Web. For example, marketing department job postings online might be one clue of a company’s readiness to buy marketing software.</p>
    </div>
]]>
</Body>
<Summary>A former Yahoo search engineer raises funds to bring sophisticated data mining and modeling to the business world.  A startup called Infer, led by a former Yahoo search engineer, plans to help...</Summary>
<Website>http://www.technologyreview.com/news/514111/software-predicts-which-companies-are-an-easy-sell/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/30044/guest@my.umbc.edu/b8a84844f72fed7c9870d23f66c38da1/api/pixel</TrackingUrl>
<Tag>development</Tag>
<Tag>internet</Tag>
<Tag>mit</Tag>
<Tag>technology</Tag>
<Tag>web</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Tue, 23 Apr 2013 15:53:57 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="28141" important="false" status="posted" url="https://my3.my.umbc.edu/posts/28141">
<Title>Dutch PHP Conference 2013</Title>
<Body>
<![CDATA[
    <div class="html-content">Ibuildings is proud to organise the seventh Dutch PHP Conference on June 7 and
         8, plus a pre-conference tutorial day on June 6. Both programs will be
         completely in English so the only Dutch thing about it is the location.
         
         
         
         This year we have 30+ speakers gathering in Amsterdam. The 3-track main
         conference covers topics like PHP 5.5, software design, APIs, Zend Framework 2,
         Symfony 2, security, scalability and more. Our Tutorial Day has an additional
         16 in-depth sessions to choose from.
         
         
         
         Your DPC ticket also lets you into the Dutch Mobile Conference: an additional
         two tracks about cutting edge javascript and non-native application
         development. This year features several side events: a bigger and better
         unconference, a Zend sponsored hackathon, a social in downtown Amsterdam, and a
         Symfony2 certification exam.
         
         
         
         The Early Bird special ends April 28th, so book right away for a 15% discount.
         We look forward to seeing you in June!</div>
]]>
</Body>
<Summary>Ibuildings is proud to organise the seventh Dutch PHP Conference on June 7 and      8, plus a pre-conference tutorial day on June 6. Both programs will be      completely in English so the only...</Summary>
<Website>http://php.net/conferences/index.php#id2013-04-23-1</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/28141/guest@my.umbc.edu/ee3b9edc5fd61701cd266657c3acefa7/api/pixel</TrackingUrl>
<Tag>conferences</Tag>
<Tag>design</Tag>
<Tag>develop</Tag>
<Tag>learn</Tag>
<Tag>mysql</Tag>
<Tag>news</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Tue, 23 Apr 2013 14:56:47 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="28138" important="false" status="posted" url="https://my3.my.umbc.edu/posts/28138">
<Title>CSS3 Overflow</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>Not the most glamorous property is it? But it just might turn out to be. Things like <em>paginated</em> overflow and overflowing into fragments, each of which is selectable and style-able. Could be pretty powerful! Like replacing sliders with browser native controls.</p>
    <p>This is the first Working Draft is out, meaning none of this is set in stone and there are no browser implementations. </p>
    <p><a href="http://dev.w3.org/csswg/css-overflow/" title="Direct link to featured article" rel="nofollow external" class="bo">Direct Link to Article</a> — <a href="http://css-tricks.com/css3-overflow/" rel="nofollow external" class="bo">Permalink</a></p>
    <p><small><a href="http://css-tricks.com/css3-overflow/" rel="nofollow external" class="bo">CSS3 Overflow</a> is a post from <a href="http://css-tricks.com" rel="nofollow external" class="bo">CSS-Tricks</a></small></p>
    </div>
]]>
</Body>
<Summary>Not the most glamorous property is it? But it just might turn out to be. Things like paginated overflow and overflowing into fragments, each of which is selectable and style-able. Could be pretty...</Summary>
<Website>http://dev.w3.org/csswg/css-overflow/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/28138/guest@my.umbc.edu/3f00c4da211f05225f145b6f3890ba90/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>link</Tag>
<Tag>mysql</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>tricks</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Tue, 23 Apr 2013 13:41:12 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="28136" important="false" status="posted" url="https://my3.my.umbc.edu/posts/28136">
<Title>Testing Laravel Controllers</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <a href="http://rss.buysellads.com/click.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=31456&amp;c=1329555080" rel="nofollow external" class="bo"><img src="http://rss.buysellads.com/img.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=31456&amp;c=1329555080" alt="" style="max-width: 100%; height: auto;"></a><p>Testing controllers isn’t the easiest thing in the world. Well, let me rephrase that: testing them is a cinch; what’s difficult, at least at first, is determining <em>what</em> to test.</p>
    <p>Should a controller test verify text on the page? Should it touch the database? Should it ensure that variables exist in the view? If this is your first hay-ride, these things can be confusing! Let me help.</p>
    <p></p>
    <blockquote><p>Controller tests should verify responses, ensure that the correct database access methods are triggered, and assert that the appropriate instance variables are sent to the view.</p></blockquote>
    <p>The process of testing a controller can be divided into three pieces.</p>
    <ul>
    <li>
    <strong>Isolate:</strong> Mock all dependencies (perhaps excluding the <code>View</code>).</li>
    <li>
    <strong>Call:</strong> Trigger the desired controller method.</li>
    <li>
    <strong>Ensure:</strong> Perform assertions, verifying that the stage has been set properly.</li>
    </ul>
    <hr>
    <h2>The Hello World of Controller Testing</h2>
    <p>The best way to learn these things is through examples. Here’s the "<em>hello world</em>" of controller testing in Laravel.</p>
    <pre>&lt;?php&#x000A;    &#x000A;    # app/tests/controllers/PostsControllerTest.php&#x000A;    &#x000A;    class PostsControllerTest extends TestCase {&#x000A;    &#x000A;      public function testIndex()&#x000A;      {&#x000A;          $this-&gt;client-&gt;request('GET', 'posts');&#x000A;      }&#x000A;    &#x000A;    }&#x000A;    </pre>
    <p>Laravel leverages a handful of Symfony’s components to ease the process of testing routes and views, including HttpKernel, DomCrawler, and BrowserKit. This is why it’s paramount that your PHPUnit tests inherit from, not <code>PHPUnit\_Framework\_TestCase</code>, but <code>TestCase</code>. Don’t worry, Laravel still extends the former, but it helps setup the Laravel app for testing, as well as provides a variety of helper assertion methods that you are encouraged to use. More on that shortly.</p>
    <p>In the code snippet above, we make a <code>GET</code> request to <code>/posts</code>, or <code>localhost:8000/posts</code>. Assuming that this line is added to a fresh installation of Laravel, Symfony will throw a <code>NotFoundHttpException</code>. If working along, try it out by running <code>phpunit</code> from the command line.</p>
    <pre>$ phpunit&#x000A;    1) PostsControllerTest::testIndex&#x000A;    Symfony\Component\HttpKernel\Exception\NotFoundHttpException:&#x000A;    </pre>
    <p>In <em>human-speak</em>, this essentially translates to, "<em>Hey, I tried to call that route, but you don’t have anything registered, fool!</em>"</p>
    <p>As you can imagine, this type of request is common enough to the point that it makes sense to provide a helper method, such as <code>$this-&gt;call()</code>. In fact, Laravel does that very thing! This means that the previous example can be refactored, like so:</p>
    <pre>#app/tests/controllers/PostsControllerTest.php&#x000A;    &#x000A;    public function testIndex()&#x000A;    {&#x000A;        $this-&gt;call('GET', 'posts');&#x000A;    }&#x000A;    </pre>
    <h3>Overloading is Your Friend</h3>
    <p>Though we’ll stick with the base functionality in this chapter, in my personal projects, I take things a step further by allowing for such methods as <code>$this-&gt;get()</code>, <code>$this-&gt;post()</code>, etc. Thanks to PHP overloading, this only requires the addition of a single method, which you could add to <code>app/tests/TestCase.php</code>.</p>
    <pre># app/tests/TestCase.php&#x000A;    &#x000A;    public function __call($method, $args)&#x000A;    {&#x000A;        if (in_array($method, ['get', 'post', 'put', 'patch', 'delete']))&#x000A;        {&#x000A;            return $this-&gt;call($method, $args[0]);&#x000A;        }&#x000A;    &#x000A;        throw new BadMethodCallException;&#x000A;    }&#x000A;    </pre>
    <p>Now, you’re free to write <code>$this-&gt;get('posts')</code> and achieve the exact same result as the previous two examples. As noted above, however, let’s stick with the framework’s base functionality for simplicity’s sake.</p>
    <p>To make the test pass, we only need to prepare the proper route.</p>
    <pre>&lt;?php&#x000A;    &#x000A;    # app/routes.php&#x000A;    &#x000A;    Route::get('posts', function()&#x000A;    {&#x000A;        return 'all posts';&#x000A;    });&#x000A;    </pre>
    <p>Running <code>phpunit</code> again will return us to green.</p>
    <hr>
    <h2>Laravel’s Helper Assertions</h2>
    <p>A test that you’ll find yourself writing repeatedly is one that ensures that a controller passes a particular variable to a view. For example, the <code>index</code> method of <code>PostsController</code> should pass a <code>$posts</code> variable to its associated view, right? That way, the view can filter through all posts, and display them on the page. This is an important test to write!</p>
    <p>If it’s that common a task, then, once again, wouldn’t it make sense for Laravel to provide a helper assertion to accomplish this very thing? Of course it would. And, of course, Laravel does!</p>
    <p><code>Illuminate\Foundation\Testing\TestCase</code> includes a number of methods that will drastically reduce the amount of code needed to perform basic assertions. This list includes:</p>
    <ul>
    <li><code>assertViewHas</code></li>
    <li><code>assertResponseOk</code></li>
    <li><code>assertRedirectedTo</code></li>
    <li><code>assertRedirectedToRoute</code></li>
    <li><code>assertRedirectedToAction</code></li>
    <li><code>assertSessionHas</code></li>
    <li><code>assertSessionHasErrors</code></li>
    </ul>
    <p>The following examples calls <code>GET /posts</code> and verifies that its views receives the variable, <code>$posts</code>.</p>
    <pre># app/tests/controllers/PostsControllerTest.php&#x000A;    &#x000A;    public function testIndex()&#x000A;    {&#x000A;        $this-&gt;call('GET', 'posts');&#x000A;    &#x000A;        $this-&gt;assertViewHas('posts');&#x000A;    }&#x000A;    </pre>
    <blockquote><p><strong>Tip:</strong> When it comes to formatting, I prefer to provide a line break between a test’s assertion and the code that prepares the stage.</p></blockquote>
    <p><code>assertViewHas</code> is simply a bit of sugar that inspects the response object – which is returned from <code>$this-&gt;call()</code> – and verifies that the data associated with the view contains a <code>posts</code> variable.</p>
    <p>When inspecting the response object, you have two core choices.</p>
    <ul>
    <li>
    <code>$response-&gt;getOriginalContent()</code>: Fetch the original content, or the returned <code>View</code>. Optionally, you may access the <code>original</code> property directly, rather than calling the <code>getOriginalContent</code> method.</li>
    <li>
    <code>$response-&gt;getContent()</code>: Fetch the rendered output. If a <code>View</code> instance is returned from the route, then <code>getContent()</code> will be equal to the HTML output. This can be helpful for DOM verifications, such as "<em>the view must contain this string.</em>"</li>
    </ul>
    <p>Let’s assume that the <code>posts</code> route consists of:</p>
    <pre>&lt;?php&#x000A;    &#x000A;    # app/routes.php&#x000A;    &#x000A;    Route::get('posts', function()&#x000A;    {&#x000A;        return View::make('posts.index');&#x000A;    });&#x000A;    </pre>
    <p>Should we run <code>phpunit</code>, it will squawk with a helpful <em>next step</em> message:</p>
    <pre>1) PostsControllerTest::testIndex&#x000A;    Failed asserting that an array has the key 'posts'.&#x000A;    </pre>
    <p>To make it green, we simply fetch the posts and pass it to the view.</p>
    <pre>&#x000A;    # app/routes.php&#x000A;    &#x000A;    Route::get('posts', function()&#x000A;    {&#x000A;        $posts = Post::all();&#x000A;    &#x000A;        return View::make('posts.index', ['posts', $posts]);&#x000A;    });&#x000A;    </pre>
    <p>One thing to keep in mind is that, as the code currently stands, it only ensures that the variable, <code>$posts</code>, is passed to the view. It doesn’t inspect its value. The <code>assertViewHas</code> optionally accepts a second argument to verify the value of the variable, as well as its existence.</p>
    <pre>&#x000A;    # app/tests/controllers/PostsControllerTest.php&#x000A;    &#x000A;    public function testIndex()&#x000A;    {&#x000A;        $this-&gt;call('GET', 'posts');&#x000A;    &#x000A;        $this-&gt;assertViewHas('posts', 'foo');&#x000A;    }&#x000A;    </pre>
    <p>With this modified code, unles the view has a variable, <code>$posts</code>, that is equal to <code>foo</code>, the test will fail. In this situation, though, it’s likely that we’d rather not specify a value, but instead declare that the value be an instance of Laravel’s <code>Illuminate\Database\Eloquent\Collection</code> class. How might we accomplish that? PHPUnit provides a helpful <code>assertInstanceOf</code> assertion to fill this very need!</p>
    <pre>&#x000A;    # app/tests/controllers/PostsControllerTest.php&#x000A;    &#x000A;    public function testIndex()&#x000A;    {&#x000A;        $response = $this-&gt;call('GET', 'posts');&#x000A;    &#x000A;        $this-&gt;assertViewHas('posts');&#x000A;    &#x000A;        // getData() returns all vars attached to the response.&#x000A;        $posts = $response-&gt;original-&gt;getData()['posts'];&#x000A;    &#x000A;        $this-&gt;assertInstanceOf('Illuminate\Database\Eloquent\Collection', $posts);&#x000A;    }&#x000A;    </pre>
    <p>With this modification, we’ve declared that the controller <strong>must</strong> pass <code>$posts</code> – an instance of <code>Illuminate\Database\Eloquent\Collection</code> – to the view. Excellent.</p>
    <hr>
    <h2>Mocking the Database</h2>
    <p>There’s one glaring problem with our tests so far. Did you catch it?</p>
    <blockquote><p>For each test, a SQL query is being executed on the database. Though this is useful for certain kinds of testing (acceptance, integration), for basic controller testing, it will only serve to decrease performance.</p></blockquote>
    <p>I’ve drilled this into your skull multiple times at this point. We’re not interested in testing Eloquent’s ability to fetch records from a database. It has its own tests. Taylor knows it works! Let’s not waste time and processing power repeating those same tests.</p>
    <p>Instead, it’s best to mock the database, and merely verify that the appropriate methods are called with the correct arguments. Or, in other words, we want to ensure that <code>Post::all()</code> never fires and hits the database. We know that works, so it doesn’t require testing.</p>
    <p>This section will depend heavily on the Mockery library. Please review that chapter <a href="http://leanpub.com/laravel-testing-decoded" rel="nofollow external" class="bo">from my book</a>, if you’re not yet familiar with it.</p>
    <h3>Required Refactoring</h3>
    <p>Unfortunately, so far, we’ve structured the code in a way that makes it virtually impossible to test.</p>
    <pre># app/routes.php&#x000A;    &#x000A;    Route::get('posts', function()&#x000A;    {&#x000A;        // Ouch. We can't test this!!&#x000A;        $posts = Post::all();&#x000A;    &#x000A;        return View::make('posts.index')&#x000A;            -&gt;with('posts', $posts);&#x000A;    });&#x000A;    </pre>
    <p>This is precisely why it’s considered bad practice to nest Eloquent calls into your controllers. Don’t confuse Laravel’s facades, which are testable and can be swapped out with mocks (<code>Queue::shouldReceive()</code>), with your Eloquent models. The solution is to inject the database layer into the controller through the constructor. This requires some refactoring.</p>
    <blockquote><p><strong>Warning:</strong> Storing logic within route callbacks is useful for small projects and APIs, but they make testing incredibly difficult. For applications of any considerable size, use controllers.</p></blockquote>
    <p>Let’s register a new resource by replacing   the <code>posts</code> route with:</p>
    <pre># app/routes.php&#x000A;    &#x000A;    Route::resource('posts', 'PostsController');&#x000A;    </pre>
    <p>…and create the necessary resourceful controller with Artisan.</p>
    <pre>$ php artisan controller:make PostsController&#x000A;    Controller created successfully!&#x000A;    </pre>
    <p>Now, rather than referencing the <code>Post</code> model directly, we’ll inject it into the controller’s constructor. Here’s a condensed example that omits all restful methods except the one that we’re currently interested in testing.</p>
    <pre>&lt;?php&#x000A;    &#x000A;    # app/controllers/PostsController.php&#x000A;    &#x000A;    class PostsController extends BaseController {&#x000A;    &#x000A;      protected $post;&#x000A;    &#x000A;      public function __construct(Post $post)&#x000A;      {&#x000A;          $this-&gt;post = $post;&#x000A;      }&#x000A;    &#x000A;      public function index()&#x000A;      {&#x000A;          $posts = $this-&gt;post-&gt;all();&#x000A;    &#x000A;          return View::make('posts.index')&#x000A;              -&gt;with('posts', $posts);&#x000A;      }&#x000A;    &#x000A;    }&#x000A;    </pre>
    <blockquote><p>Please note that it’s a better idea to typehint an interface, rather than reference the Eloquent model, itself. But, one thing at a time! Let’s work up to that.</p></blockquote>
    <p>This is a significantly better way to structure the code. Because the model is now injected, we have the ability to swap it out with a mocked version for testing. Here’s an example of doing just that:</p>
    <pre>&lt;?php&#x000A;    &#x000A;    # app/tests/controllers/PostsControllerTest.php&#x000A;    &#x000A;    class PostsControllerTest extends TestCase {&#x000A;    &#x000A;      public function __construct()&#x000A;      {&#x000A;          // We have no interest in testing Eloquent&#x000A;          $this-&gt;mock = Mockery::mock('Eloquent', 'Post');&#x000A;      }&#x000A;    &#x000A;      public function tearDown()&#x000A;      {&#x000A;          Mockery::close();&#x000A;      }&#x000A;    &#x000A;      public function testIndex()&#x000A;      {&#x000A;          $this-&gt;mock&#x000A;               -&gt;shouldReceive('all')&#x000A;               -&gt;once()&#x000A;               -&gt;andReturn('foo');&#x000A;    &#x000A;          $this-&gt;app-&gt;instance('Post', $this-&gt;mock);&#x000A;    &#x000A;          $this-&gt;call('GET', 'posts');&#x000A;    &#x000A;          $this-&gt;assertViewHas('posts');&#x000A;      }&#x000A;    &#x000A;    }&#x000A;    </pre>
    <p>The key benfit to this restructuring is that, now, the database will never needlessly be hit. Instead, using Mockery, we merely verify that the <code>all</code> method is triggered on the model.</p>
    <pre>$this-&gt;mock&#x000A;        -&gt;shouldReceive('all')&#x000A;        -&gt;once();&#x000A;    </pre>
    <p>Unfortunately, if you choose to forego coding to an interface, and instead inject the <code>Post</code> model into the controller, a bit of trickery has to be used in order to get around Eloquent’s use of statics, which can clash with Mockery. This is why we hijack both the <code>Post</code> and <code>Eloquent</code> classes within the test’s constructor, before the official versions have been loaded. This way, we have a clean slate to declare any expectations. The downside, of course, is that we can’t default to any existing methods, through the use of Mockery methods, like <code>makePartial()</code>.</p>
    <h3>The IoC Container</h3>
    <p>Laravel’s IoC container drastically eases the process of injecting dependencies into your classes. Each time a controller is requested, it is resolved out of the IoC container. As such, when we need to declare that a mock version of <code>Post</code> should be used for testing, we only need to provide Laravel with the instance of <code>Post</code> that should be used.</p>
    <pre>$this-&gt;app-&gt;instance('Post', $this-&gt;mock);&#x000A;    </pre>
    <blockquote><p>Think of this code as saying, "<em>Hey Laravel, when you need an instance of <code>Post</code>, I want you to use my mocked version.</em>" Because the app extends the <code>Container</code>, we have access to all IoC methods directly off of it.</p></blockquote>
    <p>Upon instantiation of the controller, Laravel leverages the power of PHP reflection to read the typehint and inject the dependency for you. That’s right; you don’t have to write a single binding to allow for this; it’s automated!</p>
    <hr>
    <h2>Redirections</h2>
    <p>Another common expectation that you’ll find yourself writing is one that ensures that the user is redirected to the proper location, perhaps upon adding a new post to the database. How might we accomplish this?</p>
    <pre># app/tests/controllers/PostsControllerTest.php&#x000A;    &#x000A;    public function testStore()&#x000A;    {&#x000A;        $this-&gt;mock&#x000A;             -&gt;shouldReceive('create')&#x000A;             -&gt;once();&#x000A;    &#x000A;        $this-&gt;app-&gt;instance('Post', $this-&gt;mock);&#x000A;    &#x000A;        $this-&gt;call('POST', 'posts');&#x000A;    &#x000A;        $this-&gt;assertRedirectedToRoute('posts.index');&#x000A;    &#x000A;    }&#x000A;    </pre>
    <p>Assuming that we’re following a restful flavor, to add a new post, we’d <code>POST</code> to the collection, or <code>posts</code> (don’t confuse the <code>POST</code> request method with the resource name, which just happens to have the same name).</p>
    <pre>$this-&gt;call('POST', 'posts');&#x000A;    </pre>
    <p>Then, we only need to leverage another of Laravel’s helper assertions, <code>assertRedirectedToRoute</code>.</p>
    <blockquote><p><strong>Tip:</strong> When a resource is registered with Laravel (<code>Route::resource()</code>), the framework will automatically register the necessary named routes. Run <code>php artisan routes</code> if you ever forget what these names are.</p></blockquote>
    <p>You might prefer to also ensure that the <code>$_POST</code> superglobal is passed to the <code>create</code> method. Even though we aren’t physically submitting a form, we can still allow for this, via the <code>Input::replace()</code> method, which allows us to "stub" this array. Here’s the modified test, which uses Mockery’s <code>with()</code> method to verify the arguments passed to the method referenced by <code>shouldReceive</code>.</p>
    <pre># app/tests/controllers/PostsControllerTest.php&#x000A;    &#x000A;    public function testStore()&#x000A;    {&#x000A;        Input::replace($input = ['title' =&gt; 'My Title']);&lt;/p&gt;&#x000A;    &#x000A;        $this-&gt;mock&#x000A;             -&gt;shouldReceive('create')&#x000A;             -&gt;once()&#x000A;             -&gt;with($input);&#x000A;    &#x000A;        $this-&gt;app-&gt;instance('Post', $this-&gt;mock);&#x000A;    &#x000A;        $this-&gt;call('POST', 'posts');&#x000A;    &#x000A;        $this-&gt;assertRedirectedToRoute('posts.index');&#x000A;    }&#x000A;    </pre>
    <hr>
    <h2>Paths</h2>
    <p>One thing that we haven’t considered in this test is validation. There should be two separate paths through the <code>store</code> method, dependent upon whether the validation passes:</p>
    <ol>
    <li>Redirect back to the "Create Post" form, and display the form validation errors.</li>
    <li>Redirect to the collection, or the named route, <code>posts.index</code>.</li>
    </ol>
    <blockquote><p>As a best practice, each test should represent but one path through your code.</p></blockquote>
    <p>This first path will be for failed validation.</p>
    <pre># app/tests/controllers/PostsControllerTest.php&#x000A;    &#x000A;    public function testStoreFails()&#x000A;    {&#x000A;        // Set stage for a failed validation&#x000A;        Input::replace(['title' =&gt; '']);&#x000A;    &#x000A;        $this-&gt;app-&gt;instance('Post', $this-&gt;mock);&#x000A;    &#x000A;        $this-&gt;call('POST', 'posts');&#x000A;    &#x000A;        // Failed validation should reload the create form&#x000A;        $this-&gt;assertRedirectedToRoute('posts.create');&#x000A;    &#x000A;        // The errors should be sent to the view&#x000A;        $this-&gt;assertSessionHasErrors(['title']);&#x000A;    }&#x000A;    </pre>
    <p>The code snippet above explicitly declares which errors should exist. Alternatively, you may omit the argument to <code>assertSessionHasErrors</code>, in which case it will merely verify that a message bag has been flashed (in translation, your Redirection includes <code>withErrors($errors)</code>).</p>
    <p>Now for the test that handles successful validation.</p>
    <pre># app/tests/controllers/PostsControllerTest.php&#x000A;    &#x000A;    public function testStoreSuccess()&#x000A;    {&#x000A;        // Set stage for successful validation&#x000A;        Input::replace(['title' =&gt; 'Foo Title']);&lt;/p&gt;&#x000A;    &#x000A;        $this-&gt;mock&#x000A;             -&gt;shouldReceive('create')&#x000A;             -&gt;once();&#x000A;    &#x000A;        $this-&gt;app-&gt;instance('Post', $this-&gt;mock);&#x000A;    &#x000A;        $this-&gt;call('POST', 'posts');&#x000A;    &#x000A;        // Should redirect to collection, with a success flash message&#x000A;        $this-&gt;assertRedirectedToRoute('posts.index', ['flash']);&#x000A;    }&#x000A;    </pre>
    <p>The production code for these two tests might look like:</p>
    <pre># app/controllers/PostsController.php&#x000A;    &#x000A;    public function store()&#x000A;    {&#x000A;        $input = Input::all();&#x000A;    &#x000A;        // We'll run validation in the controller for convenience&#x000A;        // You should export this to the model, or a service&#x000A;        $v = Validator::make($input, ['title' =&gt; 'required']);&#x000A;    &#x000A;        if ($v-&gt;fails())&#x000A;        {&#x000A;            return Redirect::route('posts.create')&#x000A;                -&gt;withInput()&#x000A;                -&gt;withErrors($v-&gt;messages());&#x000A;        }&#x000A;    &#x000A;        $this-&gt;post-&gt;create($input);&#x000A;    &#x000A;        return Redirect::route('posts.index')&#x000A;            -&gt;with('flash', 'Your post has been created!');&#x000A;    }&#x000A;    </pre>
    <p>Notice how the <code>Validator</code> is nested directly in the controller? Generally, I’d recommend that you abstract this away to a service. That way, you can test your validation in isolation from any controllers or  routes. Nonetheless, let’s leave things as they are for simplicity’s sake. One thing to keep in mind is that we aren’t mocking the <code>Validator</code>, though you certainly could do so. Because this class is a facade, it can easily be swapped out with a mocked version, via the Facade’s <code>shouldReceive</code> method, without us needing to worry about injecting an instance through the constructor. Win!</p>
    <pre># app/controllers/PostsController.php&#x000A;    &#x000A;    Validator::shouldReceive('make')&#x000A;        -&gt;once()&#x000A;        -&gt;andReturn(Mockery::mock(['fails' =&gt; 'true']));&#x000A;    </pre>
    <p>From time to time, you’ll find that a method that needs to be mocked should return an object, itself. Luckily, with Mockery, this is a piece of cake: we only need to create an anonymous mock, and pass an array, which signals the method name and response value, respectively. As such:</p>
    <pre>Mockery::mock(['fails' =&gt; 'true'])&#x000A;    </pre>
    <p>will prepare an object, containing a <code>fails()</code> method that returns <code>true</code>.</p>
    <hr>
    <h2>Repositories</h2>
    <p>To allow for optimal flexibility, rather than creating a direct link between your controller and an ORM, like Eloquent, it’s better to code to an interface. The considerable advantage to this approach is that, should you perhaps need to swap out Eloquent for, say, Mongo or Redis, doing so literally requires the modification of a single line. Even better, the controller doesn’t ever need to be touched.</p>
    <blockquote><p>Repositories represent the data access layer of your application.</p></blockquote>
    <p>What might an interface for managing the database layer of a <code>Post</code> look like? This should get you started.</p>
    <pre>&lt;?php&#x000A;    &#x000A;    # app/repositories/PostRepositoryInterface.php&#x000A;    &#x000A;    interface PostRepositoryInterface {&#x000A;    &#x000A;        public function all();&#x000A;    &#x000A;        public function find($id);&#x000A;    &#x000A;        public function create($input);&#x000A;    &#x000A;    }&#x000A;    </pre>
    <p>This can certainly be extended, but we’ve added the bare minimum methods for the demo: <code>all</code>, <code>find</code>, and <code>create</code>. Notice that the repository interfaces are being stored within <code>app/repositories</code>. Because this folder is not autoloaded by default, we need to update the <code>composer.json</code> file for the application to reference it.</p>
    <pre>// composer.json&#x000A;    &#x000A;    "autoload": {&#x000A;      "classmap": [&#x000A;        // ....&#x000A;        "app/repositories"&#x000A;      ]&#x000A;    }&#x000A;    </pre>
    <blockquote><p>When a new class is added to this directory, don’t forget to <code>composer dump-autoload -o</code>. The <code>-o</code>, (<em>optimize</em>) flag is optional, but should always be used, as a best practice.</p></blockquote>
    <p>If you attempt to inject this interface into your controller, Laravel will snap at you. Go ahead; try it out and see. Here’s the modified <code>PostController</code>, which has been updated to inject an interface, rather than the <code>Post</code> Eloquent model.</p>
    <pre>&lt;?php&#x000A;    &#x000A;    # app/controllers/PostsController.php&#x000A;    &#x000A;    use Repositories\PostRepositoryInterface as Post;&#x000A;    &#x000A;    class PostsController extends BaseController {&#x000A;    &#x000A;        protected $post;&#x000A;    &#x000A;        public function __construct(Post $post)&#x000A;        {&#x000A;            $this-&gt;post = $post;&#x000A;        }&#x000A;    &#x000A;        public function index()&#x000A;        {&#x000A;            $posts = $this-&gt;post-&gt;all();&#x000A;    &#x000A;            return View::make('posts.index', ['posts' =&gt; $posts]);&#x000A;        }&#x000A;    &#x000A;    }&#x000A;    </pre>
    <p>If you run the server and view the output, you’ll be met with the dreaded (but beautiful) Whoops error page, declaring that "<em>PostRepositoryInterface is not instantiable.</em>"</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/04/instantiable.jpg" alt="Not Instantiable" style="max-width: 100%; height: auto;"><br> <p>If you think about it, of course the framework is squawking! Laravel is smart, but it’s not a mind reader. It needs to be told which implementation of the interface should be used within the controller.</p>
    <p>For now, let’s add this binding to <code>app/routes.php</code>. Later, we’ll instead make use of service providers to store this sort of logic.</p>
    <pre># app/routes.php&#x000A;    &#x000A;    App::bind(&#x000A;        'Repositories\PostRepositoryInterface',&#x000A;        'Repositories\EloquentPostRepository'&#x000A;    );&#x000A;    </pre>
    <p>Verbalize this function call as, "<em>Laravel, baby, when you need an instance of <code>PostRepositoryInterface</code>, I want you to use <code>EloquentPostRepository</code>.</em>"</p>
    <p><code>app/repositories/EloquentPostRepository</code> will simply be a wrapper around Eloquent that implements <code>PostRepositoryInterface</code>. This way, we’re not restricting the API (and every other implementation) to Eloquent’s interpretation; we can name the methods however we wish.</p>
    <pre>&lt;?php namespace Repositories;&#x000A;    &#x000A;    # app/repositories/EloquentPostRepository.php&#x000A;    &#x000A;    use Repositories\PostRepositoryInterface;&#x000A;    use Post;&#x000A;    &#x000A;    class EloquentPostRepository implements PostRepositoryInterface {&#x000A;    &#x000A;      public function all()&#x000A;      {&#x000A;          return Post::all();&#x000A;      }&#x000A;    &#x000A;      public function find($id)&#x000A;      {&#x000A;          return Post::find($id);&#x000A;      }&#x000A;    &#x000A;      public function create($input)&#x000A;      {&#x000A;          return Post::create($input);&#x000A;      }&#x000A;    &#x000A;    }&#x000A;    </pre>
    <blockquote><p>Some might argue that the <code>Post</code> model should be injected into this implementation for testability purposes. If you agree, simply inject it through the constructor, per usual.</p></blockquote>
    <p>That’s all it should take! Refresh the browser, and things should be back to normal. Only, now, your application is far better structured, and the controller is no longer linked to Eloquent.</p>
    <p>Let’s imagine that, a few months from now, your boss informs you that you need to swap Eloquent out with Redis. Well, because you’ve structured your application in this future-proof way, you only need to create the new <code>app/repositories/RedisPostRepository</code> implementation:</p>
    <pre>&lt;?php namespace Repositories;&#x000A;    &#x000A;    # app/repositories/RedisPostRepository.php&#x000A;    &#x000A;    use Repositories\PostRepositoryInterface;&#x000A;    &#x000A;    class RedisPostRepository implements PostRepositoryInterface {&#x000A;    &#x000A;      public function all()&#x000A;      {&#x000A;          // return all with Redis&#x000A;      }&#x000A;    &#x000A;      public function find($id)&#x000A;      {&#x000A;          // return find one with Redis&#x000A;      }&#x000A;    &#x000A;      public function create($input)&#x000A;      {&#x000A;          // return create with Redis&#x000A;      }&#x000A;    &#x000A;    }&#x000A;    </pre>
    <p>And update the binding:</p>
    <pre># app/routes.php&#x000A;    &#x000A;    App::bind(&#x000A;        'Repositories\PostRepositoryInterface',&#x000A;        'Repositories\RedisPostRepository'&#x000A;    );&#x000A;    </pre>
    <p>Instantly, you’re now leveraging Redis in your controller. Notice how <code>app/controllers/PostsController.php</code> was never touched? That’s the beauty of it!</p>
    <hr>
    <h2>Structure</h2>
    <p>So far in this lesson, our organization has been a bit lacking. IoC bindings in the <code>routes.php</code> file? All repositories grouped together in one directory? Sure, that may work in the beginning, but, very quickly, it’ll become apparent that this doesn’t scale.</p>
    <p>In the final section of this article, we’ll PSR-ify our code, and leverage service providers to register any applicable bindings.</p>
    <blockquote><p>PSR-0 defines the mandatory requirements that must be adhered to for autoloader interoperability.</p></blockquote>
    <p>A PSR-0 loader may be registered with Composer, via the <code>psr-0</code> object.</p>
    <pre>// composer.json&#x000A;    &#x000A;    "autoload": {&#x000A;        "psr-0": {&#x000A;            "Way": "app/lib/"&#x000A;        }&#x000A;    }&#x000A;    </pre>
    <p>The syntax can be confusing at first. It certainly was for me. An easy way to decipher <code>"Way": "app/lib/"</code> is to think to yourself, "<em>The base folder for the <code>Way</code> namespace is located in <code>app/lib</code>.</em>" Of course, replace my last name with the name of your project. The directory structure to match this would be:</p>
    <ul><li>app/<ul>
    <li>lib/</li>
    <li>Way/</li>
    </ul>
    </li></ul>
    <p>Next, rather than grouping all repositories into a <code>repositories</code> directory, a more elegant approach might be to categorize them into multiple directories, like so:</p>
    <ul><li>app/<ul>
    <li>lib/</li>
    <li>Way/<ul>
    <li>Storage/</li>
    <li>Post/<ul>
    <li>PostRepositoryInterface.php</li>
    <li>EloquentPostRepository.php</li>
    </ul>
    </li>
    </ul>
    </li>
    </ul>
    </li></ul>
    <p>It’s vital that we adhere to this naming and folder convention, if we want the autoloading to work as expected. The only remaining thing to do is update the namespaces for <code>PostRepositoryInterface</code> and <code>EloquentPostRepository</code>.</p>
    <pre>&lt;?php namespace Way\Storage\Post;&#x000A;    &#x000A;    # app/lib/Way/Storage/Post/PostRepositoryInterface.php&#x000A;    &#x000A;    interface PostRepositoryInterface {&#x000A;    &#x000A;        public function all();&#x000A;    &#x000A;        public function find($id);&#x000A;    &#x000A;        public function create($input);&#x000A;    &#x000A;    }&#x000A;    </pre>
    <p>And for the implementation:</p>
    <pre>&lt;?php namespace Way\Storage\Post;&#x000A;    &#x000A;    # app/lib/Way/Storage/Post/EloquentPostRepository.php&#x000A;    &#x000A;    use Post;&#x000A;    &#x000A;    class EloquentPostRepository implements PostRepositoryInterface {&#x000A;    &#x000A;        public function all()&#x000A;        {&#x000A;            return Post::all();&#x000A;        }&#x000A;    &#x000A;        public function find($id)&#x000A;        {&#x000A;            return Post::find($id);&#x000A;        }&#x000A;    &#x000A;        public function create($input)&#x000A;        {&#x000A;            return Post::create($input);&#x000A;        }&#x000A;    &#x000A;    }&#x000A;    </pre>
    <p>There we go; that’s much cleaner. But what about those pesky bindings? The routes file may be a convenient place to experiment, but it makes little sense to store them there permanently. Instead, we’ll use service providers.</p>
    <blockquote><p>Service providers are nothing more than bootstrap classes that can be used to do anything you wish: register a binding, hook into an event, import a routes file, etc.</p></blockquote>
    <p>A service provider’s <code>register()</code> will be triggered automatically by Laravel.</p>
    <pre>&lt;?php namespace Way\Storage;&#x000A;    &#x000A;    # app/lib/Way/Storage/StorageServiceProvider.php&#x000A;    &#x000A;    use Illuminate\Support\ServiceProvider;&#x000A;    &#x000A;    class StorageServiceProvider extends ServiceProvider {&#x000A;    &#x000A;        // Triggered automatically by Laravel&#x000A;        public function register()&#x000A;        {&#x000A;            $this-&gt;app-&gt;bind(&#x000A;                'Way\Storage\Post\PostRepositoryInterface',&#x000A;                'Way\Storage\Post\EloquentPostRepository'&#x000A;            );&#x000A;        }&#x000A;    &#x000A;    }&#x000A;    </pre>
    <p>To make this file known to Laravel, you only need to include it in <code>app/config/app.php</code>, within the <code>providers</code> array.</p>
    <pre># app/config/app.php&#x000A;    &#x000A;    'providers' =&gt; array(&#x000A;        'Illuminate\Foundation\Providers\ArtisanServiceProvider',&#x000A;        'Illuminate\Auth\AuthServiceProvider',&#x000A;        // ...&#x000A;        'Way\Storage\StorageServiceProvider'&#x000A;    )&#x000A;    </pre>
    <p>Good; now we have a dedicated file for registering new bindings.</p>
    <h3>Updating the Tests</h3>
    <p>With our new structure in place, rather than mocking the Eloquent model, itself, we can instead mock <code>PostRepositoryInterface</code>. Here’s an example of one such test:</p>
    <pre># app/tests/controllers/PostsControllerTest.php&#x000A;    &#x000A;    public function testIndex()&#x000A;    {&#x000A;        $mock = Mockery::mock('Way\Storage\Post\PostRepositoryInterface');&#x000A;        $mock-&gt;shouldReceive('all')-&gt;once();&#x000A;    &#x000A;        $this-&gt;app-&gt;instance('Way\Storage\Post\PostRepositoryInterface', $mock);&#x000A;    &#x000A;        $this-&gt;call('GET', 'posts');&#x000A;    &#x000A;        $this-&gt;assertViewHas('posts');&#x000A;    }&#x000A;    </pre>
    <p>However, we can improve this. It stands to reason that every method within <code>PostsControllerTest</code> will require a mocked version of the repository. As such, it’s better to extract some of this prep work into its own method, like so:</p>
    <pre># app/tests/controllers/PostsControllerTest.php&#x000A;    &#x000A;    public function setUp()&#x000A;    {&#x000A;        parent::setUp();&#x000A;    &#x000A;        $this-&gt;mock('Way\Storage\Post\PostRepositoryInterface');&#x000A;    }&#x000A;    &#x000A;    public function mock($class)&#x000A;    {&#x000A;        $mock = Mockery::mock($class);&#x000A;    &#x000A;        $this-&gt;app-&gt;instance($class, $mock);&#x000A;    &#x000A;        return $mock;&#x000A;    }&#x000A;    &#x000A;    public function testIndex()&#x000A;    {&#x000A;        $this-&gt;mock-&gt;shouldReceive('all')-&gt;once();&#x000A;    &#x000A;        $this-&gt;call('GET', 'posts');&#x000A;    &#x000A;        $this-&gt;assertViewHas('posts');&#x000A;    }&#x000A;    </pre>
    <p>Not bad, ay?</p>
    <p>Now, if you want to be super-fly, and are willing to add a touch of test logic to your production code, you could even perform your mocking within the Eloquent model! This would allow for:</p>
    <pre>Post::shouldReceive('all')-&gt;once();&#x000A;    </pre>
    <p>Behind the scenes, this would mock <code>PostRepositoryInterface</code>, and update the IoC binding. You can’t get much more readable than that!</p>
    <p>Allowing for this syntax only requires you to update the <code>Post</code> model, or, better, a <code>BaseModel</code> that all of the Eloquent models extend. Here’s an example of the former:</p>
    <pre>&lt;?php&#x000A;    &#x000A;    # app/models/Post.php&#x000A;    &#x000A;    class Post extends Eloquent {&#x000A;    &#x000A;        public static function shouldReceive()&#x000A;        {&#x000A;            $class = get_called_class();&#x000A;            $repo = "Way\\Storage\\{$class}\\{$class}RepositoryInterface";&#x000A;            $mock = Mockery::mock($repo);&#x000A;    &#x000A;            App::instance($repo, $mock);&#x000A;    &#x000A;            return call_user_func_array([$mock, 'shouldReceive'], func_get_args());&#x000A;        }&#x000A;    &#x000A;    }&#x000A;    </pre>
    <p>If you can manage the inner "<em>Should I be embedding test logic into production code</em>" battle, you’ll find that this allows for significantly more readable tests.</p>
    <pre>&lt;?php&#x000A;    &#x000A;    # app/tests/controllers/PostsControllerTest.php&#x000A;    &#x000A;    class PostsControllerTest extends TestCase {&#x000A;    &#x000A;        public function tearDown()&#x000A;        {&#x000A;            Mockery::close();&#x000A;        }&#x000A;    &#x000A;        public function testIndex()&#x000A;        {&#x000A;            Post::shouldReceive('all')-&gt;once();&#x000A;    &#x000A;            $this-&gt;call('GET', 'posts');&#x000A;    &#x000A;            $this-&gt;assertViewHas('posts');&#x000A;        }&#x000A;    &#x000A;        public function testStoreFails()&#x000A;        {&#x000A;            Input::replace($input = ['title' =&gt; '']);&#x000A;    &#x000A;            $this-&gt;call('POST', 'posts');&#x000A;    &#x000A;            $this-&gt;assertRedirectedToRoute('posts.create');&#x000A;            $this-&gt;assertSessionHasErrors();&#x000A;        }&#x000A;    &#x000A;        public function testStoreSuccess()&#x000A;        {&#x000A;            Input::replace($input = ['title' =&gt; 'Foo Title']);&#x000A;    &#x000A;            Post::shouldReceive('create')-&gt;once();&#x000A;    &#x000A;            $this-&gt;call('POST', 'posts');&#x000A;    &#x000A;            $this-&gt;assertRedirectedToRoute('posts.index', ['flash']);&#x000A;        }&#x000A;    &#x000A;    }&#x000A;    </pre>
    <p>It feels good, doesn’t it? Hopefully, this article hasn’t been too overwhelming. The key is to learn how to organize your repositories in such a way to make them as easy as possible to mock and inject into your controllers. As a result of that effort, your tests will be lightning fast!</p>
    <blockquote><p>This article is an excerpt from my upcoming book, <a href="https://leanpub.com/laravel-testing-decoded" rel="nofollow external" class="bo">Laravel Testing Decoded</a>. Stay tuned for its release in May, 2013!</p></blockquote>
    </div>
]]>
</Body>
<Summary>Testing controllers isn’t the easiest thing in the world. Well, let me rephrase that: testing them is a cinch; what’s difficult, at least at first, is determining what to test.  Should a...</Summary>
<Website>http://feedproxy.google.com/~r/nettuts/~3/AtMxwaB4LZA/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/28136/guest@my.umbc.edu/7256c04ee66d0935354b4a10e639fd26/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>laravel</Tag>
<Tag>mysql</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>tdd</Tag>
<Tag>wed</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Tue, 23 Apr 2013 13:13:10 -0400</PostedAt>
<EditAt>Tue, 23 Apr 2013 13:13:10 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="28135" important="false" status="posted" url="https://my3.my.umbc.edu/posts/28135">
<Title>Impromptu Nachos at Noon event today! More snacks to come this week...</Title>
<Body>
<![CDATA[
    <div class="html-content">Impromptu Nachos at Noon event today! More snacks to come this week...<br><br><a href="http://www.facebook.com/l.php?u=http%3A%2F%2Finstagram.com%2Fp%2FYdDSg3qtCh%2F&amp;h=8AQH0KZGY&amp;s=1" title="" rel="nofollow external" class="bo"><img src="https://fbexternal-a.akamaihd.net/safe_image.php?d=AQBy5SgJA8lf75t0&amp;w=154&amp;h=154&amp;url=http%3A%2F%2Fdistilleryimage1.ak.instagram.com%2Fa6e96592ac3211e2a55d22000a1fbcd5_7.jpg" alt="" style="max-width: 100%; height: auto;"></a><br><a href="http://www.facebook.com/l.php?u=http%3A%2F%2Finstagram.com%2Fp%2FYdDSg3qtCh%2F&amp;h=DAQGR1uQb&amp;s=1" rel="nofollow external" class="bo">http://instagram.com/p/YdDSg3qtCh/</a><br>instagram.com<br>realevanponter's photo on Instagram</div>
]]>
</Body>
<Summary>Impromptu Nachos at Noon event today! More snacks to come this week...   http://instagram.com/p/YdDSg3qtCh/ instagram.com realevanponter's photo on Instagram</Summary>
<Website>http://www.facebook.com/umbctraining/posts/10151345534171076</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/28135/guest@my.umbc.edu/aba80d35d187617d959010d52866e9ea/api/pixel</TrackingUrl>
<Tag>ccna</Tag>
<Tag>ceh</Tag>
<Tag>centers</Tag>
<Tag>cisco</Tag>
<Tag>cyber</Tag>
<Tag>cybersecurity</Tag>
<Tag>information</Tag>
<Tag>it</Tag>
<Tag>leadership</Tag>
<Tag>management</Tag>
<Tag>microsoft</Tag>
<Tag>project</Tag>
<Tag>security</Tag>
<Tag>technology</Tag>
<Tag>training</Tag>
<Tag>umbc</Tag>
<Group token="retired-575">UMBC Training Centers</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-575</GroupUrl>
<AvatarUrl>https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/xsmall.png?1361981335</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/original.jpg?1361981335</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/xxlarge.png?1361981335</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/xlarge.png?1361981335</AvatarUrl>
<AvatarUrl size="large">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/large.png?1361981335</AvatarUrl>
<AvatarUrl size="medium">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/medium.png?1361981335</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/small.png?1361981335</AvatarUrl>
<AvatarUrl size="xsmall">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/xsmall.png?1361981335</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/xxsmall.png?1361981335</AvatarUrl>
<Sponsor>UMBC Training Centers</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Tue, 23 Apr 2013 13:00:01 -0400</PostedAt>
<EditAt>Tue, 23 Apr 2013 13:00:01 -0400</EditAt>
</NewsItem>

</News>
