I\'ve run into this issue in real code, but I put together a trivial example to prove the point.
The below code works fine. I\'ve set up a variable in my root desc
Lets take the third code snippet. Further, it can be refactored as below:
describe('simple object', function () {
var orchard;
beforeEach(function () {
orchard = {
trees: {
apple: 10,
orange : 20
},
bushes: {
boysenberry : 40,
blueberry: 35
}
};
});
describe('trees', function () {
it ('should have apples and oranges', function() {
expect (orchard.trees.apple).toBeDefined();
expect (orchard.trees.orange).toBeDefined();
expect (orchard.trees.apple).toEqual(10);
expect (orchard.trees.orange).toEqual(20);
});
it ('should NOT have pears or cherries', function() {
expect (orchard.trees.pear).toBeUndefined();
expect (orchard.trees.cherry).toBeUndefined();
});
});
});
For the new comers to Jasmine, this is how you intrepret the above code :\
describe
defines a test suite
. The test suite
name here is a user defined simple string, say "simple object".test suite
can itself contain other test suites
, meaning describe
can contain nested suites.orchid
is global to all the functions & suites defined within simple object
test suite.It
block is called a specification
or a SPEC
. It
blocks contain individual tests.Jasmine
executes the test cases, it will first visit the it
blocks meaning it will traverse all the it
block declarations.Jasmine
actually executes test cases, it will check for beforeEach
function and hence orchard
gets trees
value assigned to it.And hence you need not write a beforeEach function, inside a sub suite
. You can simply ignore
beforeEach (function() { trees = orchard.trees; });
Now compare the latest snippet below with the third snippet above.