Upgrade to ExtJS 4.0.7 - Released 10/19/2011
[extjs.git] / src / core / test / unit / README.MD
1 # Running the unit tests #
2
3 Load the index.html file with you favorite browser.
4
5 # Adding a spec #
6
7 $ build/build.sh 
8
9 You need to have the SDKTools or at least hammerjs installed and available in your
10 PATH
11
12 # THE RULES 
13
14 * No dynamic spec generation, the unit tests are not designed to be dry,
15  they must be easy to read and allow you to quickly find a bug.
16 * If a spec generates dom, don't forget to clean the document.body after 
17  it is executed.
18 * Avoid testing dom rendering we are using the eye for that, you should only test code logic.
19 * Don't comment a spec or a suite to disable it, instead use xit and xdescribe.
20 * You should have only one expectation by spec.
21 * 99% of time you don't need to write specifics test for private functions and abstract classes.
22 * RTFM https://github.com/pivotal/jasmine/wiki
23
24 # Test Coverage #
25
26 The test reporter supports jscoverage which is available at http://siliconforks.com/jscoverage/
27 Here the jscoverage-server command for each project:
28
29 Ext
30 $ jscoverage-server --no-instrument=extjs/test --no-instrument=platform/test --no-instrument=platform/core/test --no-instrument=testreporter
31
32 Touch
33 $ jscoverage-server --no-instrument=touch/test --no-instrument=platform/test --no-instrument=platform/core/test --no-instrument=testreporter
34
35 Use jscoverage-server, it helps a lot.
36
37 # Mouse and Keyboard events simulation #
38
39 /**
40  * @param {HTMLElement} el The target dom element
41  * @param {String} type The event name 'mousedown', 'click' etc...
42  * @param {Number} x The x position
43  * @param {Number} y The y position
44  */
45 jasmine.fireMouseEvent(el, type, x, y);
46
47 /**
48  * @param {HTMLElement} el The target dom element
49  * @param {String} type The event name 'keypress', 'keydown' etc...
50  * @param {Number} key The keycode number
51  */
52 jasmine.fireKeyEvent(el, type, key);
53
54 # Accessing sandbox iframe from your browser console #
55
56 The specs are run in an isolated scope from the the testreporter ui.
57 To execute command inside the isolated scope, you can use iScope() function.
58
59 // with a string as first argument
60 iScope("console.log(Ext)");
61  
62 //with a function as first argument
63 iScope(function() { console.log(Ext); });
64
65
66 # White Listing global variable #
67
68 With Chrome and Firefox the Test Reporter is able to detect global variables. 
69 But sometimes you have to create one during spec execution, in this case you must use addGlobal() function inside the spec to whitelist your global.
70
71
72 // whitelist a global variable
73 addGlobal("foobar");
74
75
76 # Matchers List #
77
78 This is a list of available matchers
79 expect(x).toEqual(y);vcompares objects or primitives x and y and passes if they are equivalent
80 expect(x).toBe(y); compares objects or primitives x and y and passes if they are the same object
81 expect(x).toMatch(pattern); compares x to string or regular expression pattern and passes if they match
82 expect(x).toBeDefined(); passes if x is not undefined
83 expect(x).toBeNull(); passes if x is null
84 expect(x).toBeTruthy(); passes if x evaluates to true
85 expect(x).toBeFalsy(); passes if x evaluates to false
86 expect(x).toContain(y); passes if array or string x contains y
87 expect(x).toBeLessThan(y); passes if x is less than y
88 expect(x).toBeGreaterThan(y); passes if x is greater than y
89 expect(fn).toThrow(e); passes if function fn throws exception e when executed
90 expect(fn).toRaiseExtError(e); passes if function fn raise an Ext.Error e when executed
91 expect(dom).hasHTML(html); passes if dom.innerHTML and html are equivalent (it normalizes difference across browsers just use standard webkit/ff innerHTML)