...
Code Block |
---|
fluid.defaults("fluid.tests.catTester", { gradeNames: ["fluid.test.testCaseHolder", "autoInit"], testCasesmodules: [ /* declarative specification of tests */ { name: "Cat test case", tests: [{ expect: 1, name: "Test Global Meow", type: "test", func: "fluid.tests.globalCatTest", args: "{cat}" } ] }] }); fluid.tests.globalCatTest = function (catt) { jqUnit.assertEquals("Sound", "meow", catt.makeSound()); }; |
The standard structure inside a fluid.test.testCaseHolder
shows an outer layer of containment, testCases
modules, corresponding to a QUnit module
, and then a entry named tests
, holding an array of structures corresponding to a QUnit testCase
. Here we define a single test case which holds a single fixture record which executes a global function, fluid.tests.globalCatTest
which makes one jqUnit assertion. In cases where we apply sequence testing, the fixture record may instead hold an entry named sequence
which holds an array of fixture records representing sequence points to be attained by the test case.
...
Code Block |
---|
fluid.defaults("fluid.tests.asyncTester", { gradeNames: ["fluid.test.testCaseHolder", "autoInit"], newTextValue: "newTextValue", furtherTextValue: "furtherTextValue", testCasesmodules: [ { name: "Async test case", tests: [{ name: "Rendering sequence", expect: 7, sequence: [ { func: "fluid.tests.startRendering", args: ["{asyncTest}", "{instantiator}"] }, { listener: "fluid.tests.checkEvent", event: "{asyncTest}.events.buttonClicked" }, { // manually click on the button jQueryTrigger: "click", element: "{asyncTest}.dom.button" }, { listener: "fluid.tests.checkEvent", event: "{asyncTest}.events.buttonClicked" }, { // Issue two requests via UI to change field, and check model update func: "fluid.tests.changeField", args: ["{asyncTest}.dom.textField", "{asyncTester}.options.newTextValue"] }, { listenerMaker: "fluid.tests.makeChangeChecker", args: ["{asyncTester}.options.newTextValue", "textValue"], path: "textValue", changeEvent: "{asyncTest}.applier.modelChanged" }, { func: "fluid.tests.changeField", args: ["{asyncTest}.dom.textField", "{asyncTester}.options.furtherTextValue"] }, { listenerMaker: "fluid.tests.makeChangeChecker", makerArgs: ["{asyncTester}.options.furtherTextValue", "textValue"], // alternate style for registering listener spec: {path: "textValue", priority: "last"}, changeEvent: "{asyncTest}.applier.modelChanged" }, { func: "jqUnit.assertEquals", args: ["Model updated", "{asyncTester}.options.furtherTextValue", "{asyncTest}.model.textValue"] }, { // manually click on the button a final time with direct listener jQueryTrigger: "click", element: "{asyncTest}.dom.button" }, { jQueryBind: "click", element: "{asyncTest}.dom.button", listener: "fluid.tests.checkEvent" } ] } ] }] }); fluid.tests.checkEvent = function () { jqUnit.assert("Button event relayed"); }; fluid.tests.changeField = function (field, value) { field.val(value).change(); }; fluid.tests.makeChangeChecker = function (toCheck, path) { return function (newModel) { var newval = fluid.get(newModel, path); jqUnit.assertEquals("Expected model value " + toCheck + " at path " + path, toCheck , newval); }; } fluid.tests.startRendering = function (asyncTest, instantiator) { asyncTest.refreshView(); var decorators = fluid.renderer.getDecoratorComponents(asyncTest, instantiator); var decArray = fluid.values(decorators); jqUnit.assertEquals("Constructed one component", 1, decArray.length); asyncTest.locate("button").click(); }; |
...