This example shows how to use the ArrayAssert
object, which
contains assertions designed to be used specifically with JavaScript Arrays and array-like objects.
This example uses the ArrayAssert
object to test methods on JavaScript's
built-in Array
object. The intent of this example is to introduce ArrayAssert
and its methods
as an alternative to the generic methods available on Assert
.
The example begins by creating an example namespace and TestCase
:
This TestCase
has a setUp()
method that creates an array for all the tests to use, as well as
a tearDown()
method that deletes the array after each test has been executed. This array is used throughout
the tests as a base for array manipulations.
push()
The first test is testPush()
, which tests the functionality of the Array
object's push()
method
(other methods hidden for simpicity):
The test begins by setting up a shortcut variables for ArrayAssert
, then pushes the value 6 onto
the data
array (which was created by setUp()
). Next, ArrayAssert.isNotEmpty()
determines if the
array has at least one item; this should definitely pass because the push()
operation only adds values to the array. To determine
that the new value, 6, is in the array, ArrayAssert.contains()
is used. The first argument is the value to look for and the second
is the array to look in. To find out if the new value ended up where it should have (the last position, index 6), ArrayAssert.indexOf()
is used, passing in the value to search for as the first argument, the array to search in as the second, and the index at which the value should
occur as the final argument. Since 6 was pushed onto the end of an array that already had 6 items, it should end up at index 6 (the length of the
array minus one). As a final test, ArrayAssert.itemsAreEqual()
is used to determine that all of the items in the array are in the
correct place. The first argument of this method is an array that has all of the values that should be in the array you're testing. This assertion
passes only when the values in both arrays match up (the values are equal and the positions are the same).
pop()
The next test is testPop()
, which tests the functionality of the Array
object's pop()
method:
This test also starts out by creating some shortcut variables, for Assert
and ArrayAssert
. Next, the pop()
method is called, storing the returned item in value
. Since pop()
should only remove a single item, ArrayAssert.isNotEmpty()
is called to ensure that only one item has been removed. After that, Assert.areEqual()
is called twice: once to check the
length of the array and once to confirm the value of the item that was removed from the array (which should be 5). The last assertion uses
ArrayAssert.itemsAreSame()
, which is similar to ArrayAssert.itemsAreEqual()
in that it compares values between two
arrays. The difference is that ArrayAssert.itemsAreSame()
uses strict equality (===
) to compare values, ensuring that
no behind-the-scenes type conversions will occur (this makes ArrayAssert.itemsAreSame()
more useful for working with arrays of
objects).
reverse()
The next test is testReverse()
, which tests the functionality of the Array
object's reverse()
method:
The testRemove()
method is very simple, calling reverse()
on the array and then testing the result. Since
every item in the array has changed, the changes can be tested by calling ArrayAssert.itemsAreEqual()
once (instead of
calling ArrayAssert.indexOf()
multiple times). The first argument is an array with all the values in the reverse order
of the array that was created in setUp()
. When compared with the second argument, the newly reversed array, the values in
each position should be equal.
shift()
The next test is testShift()
, which tests the functionality of the Array
object's shift()
method:
The shift()
method removes the first item in the array and returns it (similar to pop()
, which removes the item
from the end). In the testShift()
method, shift()
is called and the item is stored in value
. To ensure
that the rest of the array is still there, ArrayAssert.isNotEmpty()
is called. After that, Array.areEqual()
is
called twice, once to test the length of the array and once to test the value that was returned from shift()
(which should be
0). As a last test, the entire array is tested using ArrayAssert.itemsAreEqual()
to ensure that all of the items have shifted
into the appropriate positions in the array.
splice()
The next test is testSplice()
, which tests the functionality of the Array
object's splice()
method:
The splice()
method is one of the most powerful Array
manipulations. It can both remove and add any number of items
from an array at the same time. This test begins by splicing some values into the array. When calling splice()
, the first argument
is 1, indicating that values should be inserted at index 1 of the array; the second argument is 2, indicating that two values should be
removed from the array (the value in index 1 and the value in index 2); the third and fourth arguments are values that should be inserted
into the array at the position given by the first argument. Essentially, values 1 and 2 should end up being replaced by values 99 and 100 in
the array.
The first test is to determine that the length of the array is still 6 (since the previous step removed two items and then inserted two, the
length should still be 6). After that, Assert.indexOf()
is called to determine that the values of 99 and 100 are in positions
1 and 2, respectively. To ensure the integrity of the entire array, ArrayAssert.itemsAreEqual()
is called on the array, comparing
it to an array with the same values. The very last step is to test the value returned from splice()
, which is an array containing
the removed values, 1 and 2. ArrayAssert.itemsAreEqual()
is appropriate for this task as well.
unshift()
The next test is testUnshift()
, which tests the functionality of the Array
object's unshift()
method:
Working similar to push()
, unshift()
adds a value to the array, but the item is added to the front (index 0) instead of
the back. This test begins by adding the value -1 to the array. The first assertion determines if the length of the array has been incremented
to 7 to account for the new value. After that, ArrayAssert.indexOf()
is used to determine if the value has been placed in the
correct location. The final assertions tests that the entire array is expected by using ArrayAssert.itemsAreEqual()
.
With all of the tests defined, the last step is to run them. This initialization is assigned to take place when the document tree has been
completely loaded by using the Event utility's onDOMReady()
method:
Before running the tests, it's necessary to create a TestLogger
object to display the results (otherwise the tests would run
but you wouldn't see the results). After that, the TestRunner
is loaded with the TestSuite
object by calling
add()
(any number of TestCase
and TestSuite
objects can be added to a TestRunner
,
this example only adds one for simplicity). The very last step is to call run()
, which begins executing the tests in its
queue and displays the results in the TestLogger
.
You can load the necessary JavaScript and CSS for this example from Yahoo's servers. Click here to load the YUI Dependency Configurator with all of this example's dependencies preconfigured.
Copyright © 2009 Yahoo! Inc. All rights reserved.
Privacy Policy - Terms of Service - Copyright Policy - Job Openings