Articles tagged 'refactoring'
-
Page Objects: Where do you put your assertions?
April 12, 2016
I started writing about Page Objects earlier this month, and as soon as you start talking about Page Objects, you need to have an opinion about where to put your assertions. Do you ask the page if it is in the state it expects to be or do you ask the page for values and assert that they are what you expect them to be in the test?
If you look at FluentLenium and Simplelenium on GitHub, you’ll notice that their corresponding
README
s describe the usage of the Page Object pattern. Now, if you take a closer look, you’ll also notice that they have an opinion: they’ve included the assertions in the definition of such Page Objects.Now, my first experience with Page Objects was actually under these conditions. The Page Objects were the main driver…
-
Using Page Objects in your Acceptance Tests
April 10, 2016
If you’ve written acceptance tests for web applications in the past (also called feature tests), you might be familiar with tools like Capybara, Simplelenium and FluentLenium. These are great abstractions over the browser (thanks, Selenium!) that provide very nice APIs for testing web applications.
If you’ve done this for a while, you might also have heard of Page Objects. The idea behind them is that your tests should be about the behavior of your application and not about the underlying HTML, since the HTML is an implementation detail and probably not the interesting part of your tests.
Our base acceptance test
Let’s assume that we are working on an application where you can browse and review restaurants and we have an acceptance test…
-
Unit Testing ActiveRecord eager-loading
January 27, 2016
If you’ve worked with relational databases and any ORMs like Java’s Hibernate, .NET’s NHibernate or Rails’
ActiveRecord
in the past, you might be familiar with SELECT N+1 issues. It is a common performance problem in database-dependent applications and, because of this, these ORMs provide a built-in solution to this problem.In
ActiveRecord
,includes
,preload
andeager_load
come to the rescue. Therefore, it is not unusual to find these keywords scattered in different places where your application accesses the database. Hopefully this isn’t a lot of places though - you are using Query Objects, right?An example application
Let’s imagine for a second that we have an application where you can browse restaurants, which in turn have many reviews…
-
Query Objects in the Rails world - A Different Approach
January 26, 2016
If you have worked with Ruby on Rails before then you might be familiar with ActiveRecord
scopes
. Using them, you can achieve what many would consider very readable code. Let’s say that we have an application where we display an inbox where users receive messages.class Message < ActiveRecord::Base end
Now, let’s imagine that after reading a
Message
, it is marked as read, and let’s represent that with aread
column in the database. Additionally, our users can either archive theMessage
or move it to the trash. We’ll represent this concept with alocation
column in themessages
table.Querying the database the Rails way
Let’s say that our users want to have a way to view unread messages in their inbox. Using
ActiveRecord
, you could achieve… -
jQuery Rambling Slider v0.1.2 is out!
November 11, 2011
This post was originally published in the Rambling Labs Blog on November 11, 2011.
I am proud to announce that version 0.1.2 of the jQuery Rambling Slider has been released!
It really has been out for a couple of days now, but I’ve had a couple of busy weeks. Nevertheless, I managed to do the major refactoring that I mentioned when version 0.1.1 was released. So, what have I added to this new release? Here’s the list:
- Added the ability to call the
stop
andstart
methods from$('#slider').ramblingSlider('stop')
. - Added the
foldLeft
animation. - Refactored the build process, as the commands remain the same (
cake build
andcake minify
) - Added the missing yuicompressor (oops…)
- Reformatted the for loops to be more CoffeeScript-ish.
- Added the…
- Added the ability to call the