karma-html v1.0.5
Description
Use karma-html to test your html files in the browser with karma
karma-htmlloads the chosen.htmlfiles into the iframe elements in thecontext.htmlkarma browser runner.karma-htmlallows you to open, refresh, close and set the dimensions of the iframes through your test suits whenever you want.karma-htmlgives you the access to theDocumentobject of each loaded.htmlfile through your test suits. Testing.htmlfiles via itsDocumentobjects seems much more genuine and reliable than when HTML content is appended into thedivcontainers.
See also
karma-jasmine-dom[npm] (Set of 19 jasmine custom matchers configured for karma to test html DOM)Got confused? See the step-by-step example below to get acquainted with what the
karma-htmlcan be used for.
The list of contents:
- Description
- Q&A
- Config
- karmaHTML and Tag objects
- iframe Document Object access
- Methods
- Properties
- Common problems
- Examples
- Step-by-step configuration
Q&A
- How should I configure the karma
config file, to run karmaHTML in my browser? [see below] - How can I indicate
.htmlfiles, that I want to test? [see below] - How can I open my
.htmlfiles in my karma browser runner? [see below] - How can I get the access to the Document Object of each
.htmlfile loaded in my tests? [see below] - Ok, I've already tested my
.htmlfiles, I don't need it anymore, I want to close them. [see below] - I've got million
.htmlfiles to test! I'd prefer to open, test and close each.htmlfile separately, rather than open them all at once! [see below] - How do I know, if the
.htmlfile has been loaded successfully and whether it is ready to be tested? [see below] - The
.htmlfiles are loading for ages! Perhaps something's not right... I want to set timeout! [see below] - I want to test the responsiveness of the layout. [see below]
Config
- use
npm install karma-html --save-dev - Add
"karmaHTML"as areporterin the karmaconfig file - Add
karmaHTMLobject in theclientobject in the karmaconfig file
module.exports = function(config) {
config.set({
//other karma settings
reporters: ["karmaHTML"],
client: {
karmaHTML: {
//all karma-html settings
}
}
});
};client.karmaHTML properties
All config properties (excluding client.karmaHTML.source) are optional. For the omitted properties, the properties of the incorrect type or value, the default values will be used instead.
client.karmaHTML.source
Type: Array
Default: If the source property is of the incorrect syntax or does not indicate any (or existing) .html file, the suitable hint errors will occure with the clear explanation what to fix. The karma will run without karma-html module if the client.karmaHTML.source property is incorrect anyway.
Description: Indicates the .html file(s) that should be loaded into the iframes. The array should include object-type items with src property, that indicates the .html file path and the tag property, that can further be used in the unit tests to get the control of the particular .html file. The tag names should respect JavaScript identifiers constructing rules: [A-Za-z0-9_$], began with letter, _ or $
You do not have to load
.htmlfiles in the karmaconfig filefilesarray, if you've already loaded them in theclient.karmaHTML.sourcearray.
Remember, to load all resources files of you.htmlfiles in the karmaconfig filefilesarray.
Syntax example
module.exports = function(config) {
config.set({
files: [
//no need to load your index.html and template.html here
//all resources of your .html files should be loaded here
{pattern: './public/*.js', watched:true, served:true, included:true},
{pattern: './public/*.png', watched:false, served:true, included:false},
{pattern: './public/fonts/*', watched:false, served:true, included:false}
],
client: {
karmaHTML:{
source: [
{src:'./public/index.html', tag:'index'},
{src:'./public/template.html', tag:'tmpl'}
]
}
}
});
}; client.karmaHTML.auto
Type: Boolean
Default: false
Description: If true, the .html files are loaded into the iframes automatically (immediately after the context.html karma browser runner is loaded). If false, the .html files can be loaded manually by invoke open() method [see below].
client.karmaHTML.timeout
Type: Number
Default: 0 (no timeout)
Description: The number of milliseconds the iframe server request can take before automatically being terminated. When a timeout happens, the onstatechange method [see below] fires and returns false.
client.karmaHTML.abort
Type: Number
Default: 0 (no abort)
Description: The number of milliseconds the loading resources can take before automatically being terminated. When an abort happens, the onstatechange method [see below] fires and returns false.
You may also check out:
Also check out karma
browserNoActivityTimeout[link]
Also check out jasmineDEFAULT_TIMEOUT_INTERVAL[link]
client.karmaHTML.width
Type: String
Default: "90%"
Description: The CSS width of the iframe, that the .html file is about to be loaded into. The value (eg. 600px) is appended to the iframe element as the attribute style="width:600px". Each valid CSS values and units are allowed. Incorrect values will be ignored and the default value will be used instead.
client.karmaHTML.height
Type: String
Default: "80vh"
Description: The CSS height of the iframe, that the .html file is about to be loaded into. The value (eg. 600px) is appended to the iframe element as the attribute style="height:600px". Each valid CSS values and units are allowed. Incorrect values will be ignored and the default value will be used instead.
Syntax of client.karmaHTML configuration example
module.exports = function(config) {
config.set({
//all the karma config here
client: {
//all the client config here
karmaHTML:{
source: [
{src:'./public/index.html', tag:'index'},
{src:'./public/template.html', tag:'tmpl'}
],
auto: true,
timeout: 10000,
abort: 60000,
width: "730px",
height: "30vw"
}
}
});
}; karmaHTML and Tag objects
window.karmaHTML | karmaHTML
- When you configured your karma
config file, you have got the access to thekarmaHTMLobject with all features (methods and properties) to control your.htmlfiles. ThekarmaHTMLobject is created and appended to thewindowobject when thecontext.htmlkarma browser runner is opened via cmdkarma startcommand.
object structure
KarmaHTML {
0: Tag
1: Tag
index: Tag
tmpl: Tag
length: 2
onstatechange: function() | undefined
__proto__: {
open: function()
close: function()
reload: function()
height: (get|set) function()
width: (get|set) function()
elementList: {}
tagList: []
config: {}
}
}karmaHTML.tagName | karmaHTML[Number]
karmaHTMLobject lets you controll all.htmlfiles, whileTagobjects let you control each.htmlfile separately.Tagobjects are generated automatically.- The number of accessible
Tagobjects is equal to the number of.htmlfiles defined in the karmaconfig file. - The
Tagobjects are accessible viakarmaHTMLobject. - Assuming, that you want to test
index.htmlfile of theindextag and thetemplate.htmlfile of thetmpltag [as above], you would get the twoTagobjects with:karmaHTML.indexorkarmaHTML[0]andkarmaHTML.tmplorkarmaHTML[1]
object structure
Tag {
tag: String
itemNum: Number
document: HTMLDocument | null
iframe: HTMLIFrameElement | null
src: String
hasIframe: Boolean
ready: Boolean
onstatechange: function() | undefined
__proto__: {
_root: karmaHTML
open: function()
close: function()
reload: function()
height: (get|set) function()
width: (get|set) function()
}
}iframe Document object access
How to get the browser access to the Document Object of each .html file loaded into the iframes?
Assuming, that you want to test index.html file of the index tag and the template.html file of the tmpl tag [as above]:
You can get the access via the karmaHTML object
To get the access to any iframe Document object of loaded .html file, use karmaHTML['tag_name'].document
- To get the access to the Document object of
index.htmlfile, usekarmaHTML.index.document - To get the access to the Document object of
template.htmlfile, usekarmaHTML.tmpl.document
It gives you the access to the Document object if its iframe is appended to the DOM. Use the
open()method or configure the karmaconfig filesetting appropriately:client.karmaHTML.auto:true[as above]
You can get the access via the window Object
Each iframe Document object's reference is added to the window object as document_0, document_1, document_2, etc. property.
The document_Xs are numbered according to the order of client.karmaHTML.source items (started from 0)
- To get the access to the Document object of
index.htmlfile, usewindow.document_0(or justdocument_0) - To get the access to the Document object of
template.htmlfile, usewindow.document_1(or justdocument_1) - etc.
It gives you the access to the Document object if its iframe is appended to the DOM. Use the
open()method or configure the karmaconfig filesetting appropriately:client.karmaHTML.auto:true
Methods
The methods can be used:
1. As global methods; eg. karmaHTML.open()
Then it affects all iframes of all .html files (all files are opened at once)
2. As tag methods; eg. karmaHTML.index.open()
Then it affects only the iframe of the .html file of index tag (the index.html is opened only)
open()
Syntax: karmaHTML.open() | karmaHTML.tagName.open()
Description: Appends the iframe element into the DOM and loads the .html file.
- The
karmaHTML.open()opens all.htmlfiles defined in the karmaconfig file. If some of the.htmlfiles are already opened, theopen()method opens only those of the.htmlfiles, that are not yet appended to the DOM. - The
karmaHTML.index.open()does the same only with the.htmlfile of theindextag. If the particular.htmlfile is already opened, theopen()method is ignored.
Parameters: karmaHTML.open(dimensions)
| parameter | Syntax | Description |
|---|---|---|
dimensions | {width:String,height:String} | It sets the CSS width and height properties of the iframe(s). The width and height property are the equivalents of the karmaHTML.width and karmaHTML.height properties. If the iframe is already opened, only its dimensions will be changed. |
example
karmaHTML.open({width:'700px',height:'10%'}); //appends the iframes for all html files with specified dimensions
karmaHTML.index.open({height:'auto'}); //appends only html file of the tag index with specified height dimension
karmaHTML.tmpl.open({width:null,height:null}); //appends html file of tmpl tag with default width and heightclose()
Syntax: karmaHTML.close() | karmaHTML.tagName.close()
Description: Removes iframe from the document.
- The
karmaHTML.close()closes (if opened) all iframes of all.htmlfiles defined in the karmaconfig file. - The
karmaHTML.tmpl.close()does the same only with the.htmlfile of thetmpltag. If the particular.htmlfile is already closed, theclose()method is ignored.
reload()
Syntax: karmaHTML.reload() | karmaHTML.tagName.reload()
Description: Refreshes the Document of .html file(s) in the iframes.
- The
karmaHTML.reload()refreshes all opened iframeDocuments. - The
karmaHTML.index.reload()refreshes theDocumentof the.htmlfile of theindextag. If the iframe is not opened, it opens it and loads the.htmlfile instead.
Properties
karmaHTML properties:
width
(getter) Syntax: karmaHTML.width
Return value type: Object
(setter) Syntax: karmaHTML.width = String
Description: Sets or returns the width dimension of the iframes of all .html files defined in the karma config file.
karmaHTML.width
- Returns the object of
tag:valuepairs of all iframes (regardless they are appended to the DOM), eg.{index:'80%',tmpl:'600px'}
karmaHTML.width = String
- Sets the CSS
widthof all iframes, eg.karmaHTML.width = '50%' - You can set the
widthregardless all iframes are appended to the DOM - When used before
karmaHTML.open(), the iframes will be opened with the newwidthvalue - The value (eg.
'600px') is appended to the iframe elements as the attributestyle="width:600px" - All valid CSS values and units are allowed
- Incorrect values will be ignored and the
widthwill not be changed - Use
karmaHTML.width = nullto reset all iframeswidthCSS style to its default values (to the value defined in the karmaconfig fileasclient.karmaHTML.width[see above], or - if not defined - to the module default value90%)Also check out
karmaHTML.index.widthproperty
Also check outkarmaHTML.open()dimensions parameter
height
(getter) Syntax: karmaHTML.height
Return value type: Object
(setter) Syntax: karmaHTML.height = String
Description: Sets or returns the height dimension of the iframes of all .html files defined in the karma config file.
It works accordingly to the karmaHTML.width property [see above].
Also check out
karmaHTML.index.heightproperty
elementList
Syntax: karmaHTML.elementList (readonly)
Return value type: Array
Description: Returns the list of HTML elements that are used to display iframes in the browser. Getting the access to any of HTML elements gives you the access to all of its DOM properties and methods. It returns the array of object-type items. The number of items returned (and the item index) is equal to the number (and item index) of .html files specified in the karma config file. Each item of returned array contains the properties:
container- reference to the \<div> element that contains all below elementsiframe- reference to the \<iframe> element that the.htmlfiles are loaded intoprompt- reference to the iframe header that contains all below elementsstate- reference to the \<span> element that displays the current state ofrequest|responsestatus of loading.htmlfiletag- reference to the \<span> element that displays the tag name of the current.htmlfile loaded to the iframe
tagList
Syntax: karmaHTML.tagList (readonly)
Return value type: Array
Description: Returns the list of Tag objects, generated for all .html files specified in the karma config file. The number of items returned (and the item index) is equal to the number (and item index) of .html files in karma config file. Getting the access to any of the Tag objects gives you the access to all of its methods and properties.
Also check out
karmaHTMLandTagobjects
config
Syntax: karmaHTML.config (readonly)
Return value type: Object
Description: Returns the list of config properties specified in the karma config file. If some of config properties where not specified in the karma config file it returns the module default value instead. It returns:
source- returns theclient.karmaHTML.sourcearray [see above]auto- returns theclient.karmaHTML.auto[see above] (if not specified - returns defaultfalse)width- returns theclient.karmaHTML.width[see above] (if not specified - returns default90%)height- returns theclient.karmaHTML.height[see above] (if not specified - returns default80vh)abort- returns theclient.karmaHTML.abort[see above] (if not specified - returns default0)timeout- returns theclient.karmaHTML.timeout[see above] (if not specified - returns default0)
length
Syntax: karmaHTML.length (readonly)
Return value type: Number
Description: Returns the number of Tag Objects. The length value is equal to the number of .html files defined in the karma config file.
loop example
var w = ['50%','700px'];
var h = ['400px','50vh'];
//loop through all Tag objects
for(var i=0; i<karmaHTML.length; i++){
karmaHTML[i].open({width:w[i],height:h[i]});
}onstatechange
Syntax: karmaHTML.onstatechange = function(ready,tag,status,statusText){...}
Return value type: Function | undefined
Description: Take the action when the state of any .html file defined in the karma config file changes.
If you want to observe the particular
.htmlfile of chosen tag name, rather than all.htmlfiles defined in the karmaconfig file, check outkarmaHTML.index.onstatechangeproperty
1. Defining onstatechange:
Define onstatechange as a function(). This function() will be automatically fired in the following situations:
- the html resources are loaded (the
responseparameter is passed as true) - the iframe html page is reloaded (the
responseparameter is passed as true) - the iframe html page is closed (the
responseparameter is passed as false) - the
abortis terminated (theresponseparameter is passed as false) - the
timeoutis terminated (theresponseparameter is passed as false) - any error occurs during html resources loading (the
responseparameter is passed as false)
karmaHTML.onstatechange = function(ready,tag,status,statusText){
//some fireworks and magic here
}2. Parameters:
ready(Boolean) parameter passestrueif.htmlfile has been loaded correctly, otherwise it passesfalsetag(String) parameter indicates which.htmlfile's state has been changedresponse(Number) parameter passes HTTP numerical response message, eg.200,404responseText(String) parameter passes HTTP textual response message, eg.OK,Not Found
3. Un-defining onstatechange:
To stop firing onstatechange defined function(), re-define onstatechange property with any other - than function - value type.
karmaHTML.onstatechange = null;
karmaHTML.onstatechange = false;
karmaHTML.onstatechange = "";syntax example
karmaHTML.onstatechange = function(ready,tag,status,statusText){
if(ready) {
if(tag==='index') run_index_tests();
if(tag==='tmpl') run_tmpl_tests();
}
}
karmaHTML.open();jasmine syntax example
describe("The index.html iframe document",function(){
beforeAll(function(done){
karmaHTML.index.onstatechange = function(ready){
if(ready) done(); //if the #Document is ready, fire tests!
};
karmaHTML.index.open();
});
it("should be a real Document object",function(){
var iframeDocument = karmaHTML.index.document;
expect(iframeDocument.constructor.name).toEqual('HTMLDocument');
});
});Tag properties:
In all below contents assume, that your karma
config filehas got theindex.htmlfile ofindextag specified.
Also check out how to define tag names
_root
Syntax: karmaHTML.index._root (readonly)
Return value type: Object
Description: Returns the karmaHTML Object. It lets you get the access to the methods and properties of karmaHTML Object through Tag Object.
width
(getter) Syntax: karmaHTML.index.width
Return value type: String
(setter) Syntax: karmaHTML.index.width = String
Description: Sets or returns the width dimension of the iframe of the .html file of index tag defined in the karma config file.
karmaHTML.index.width
- Returns the
Stringvalue of CSS width property of the iframe of the.htmlfile ofindextag (regardless it is appended to the DOM), eg.'600px'
karmaHTML.index.width = String
- Sets the CSS
widthof the iframe of the.htmlfile ofindextag, eg.karmaHTML.index.width = '50%' - You can set the
widthregardless this iframe is appended to the DOM - When used before
karmaHTML.open(), this iframe will be opened with the newwidthvalue - The value (eg.
'600px') is appended to the iframe element as the attributestyle="width:600px" - All valid CSS values and units are allowed
- Incorrect values will be ignored and the
widthwill not be changed - Use
karmaHTML.index.width = nullto reset this iframewidthCSS style to its default value (to the value defined in the karmaconfig fileasclient.karmaHTML.width[see above], or - if not defined - to the module default value90%)Also check out
karmaHTML.widthparameter
Also check outkarmaHTML.index.open()dimensions parameter
height
(getter) Syntax: karmaHTML.index.height
Return value type: String
(setter) Syntax: karmaHTML.index.height = String
Description: Sets or returns the height dimension of the iframe of the .html file of index tag defined in the karma config file. It works accordingly to the karmaHTML.index.width property [see above].
Also check out
karmaHTML.heightparameter
Also check outkarmaHTML.index.open()dimensions parameter
tag
Syntax: karmaHTML.index.tag (readonly)
Return value type: String
Description: Returns the String value of the tag name of the current Tag object (regardless its iframe is appended to the DOM); eg. karmaHTML.index.tag returns 'index'
itemNum
Syntax: karmaHTML.index.itemNum (readonly)
Return value type: Number
Description: Returns the Number value of the array index position of the .html file of index tag defined in the karma config file client.karmaHTML.sources array (regardless this iframe is appended to the DOM).
Assuming, that the karma config.file client.karmaHTML.source array contains index.html file of index tag as the first item, and template.html file of tmpl tag as the second item, the karmaHTML.index.itemNum will return 0 and karmaHTML.tmpl.itemNum will return 1.
document
Syntax: karmaHTML.index.document (readonly)
Return value type: HTMLDocument | null
Description: Returns the HTML Document object of the .html file of index tag defined in the karma config file. If the iframe of this .html file is not appended to the DOM, there's an error occurance, or when the timeout or abort has terminated, it returns null.
Also check out iframe Document object access
iframe
Syntax: karmaHTML.index.iframe (readonly)
Return value type: HTMLIFrameElement
Description: Returns the HTMLIFrameElement object of the .html file of index tag defined in the karma config file (regardless this iframe is appended to the DOM).
Also check out
karmaHTML.elementListproperty
src
Syntax: karmaHTML.index.src (readonly)
Return value type: String
Description: Returns the String url path of the .html file of index tag defined in the karma config file (regardless this iframe is appended to the DOM).
Also check out
client.karmaHTML.sourceproperty
hasIframe
Syntax: karmaHTML.index.hasIframe (readonly)
Return value type: Boolean
Description: Returns true, if the iframe of the .html file of index tag defined in the karma config file is appended to the DOM, otherwise it returns false.
Also check out
karmaHTML.open()method
Also check outkarmaHTML.close()method
ready
Syntax: karmaHTML.index.ready (readonly)
Return value type: Boolean
Description: Returns true, if the iframe of the .html file of index tag defined in the karma config file is both appended to the DOM and loaded correctly (with no errors, timeout or abort terminated), otherwise it returns false.
If you set your karma config file client.karmaHTML.auto property to true, your .html files may be loaded before you define onstatechange property to catch the moment of loading finish. Then you can use the following code, to check out, whether your .html file is already loaded:
if(karmaHTML.index.ready) run_index_tests();onstatechange
Syntax: karmaHTML.index.onstatechange = function(ready,tag,status,statusText){...}
Return value type: Function | undefined
Description: Take the action when the state of the .html file of index tag defined in the karma config file changes.
If you want to observe all
.htmlfiles defined in the karmaconfig file, rather than the.htmlfile of chosen tag name, seekarmaHTML.onstatechangeproperty
1. Defining onstatechange:
Define onstatechange as a function(). This function() will be automatically fired in the following situations:
- the html resources are loaded (the
responseparameter is passed as true) - the iframe html page is reloaded (the
responseparameter is passed as true) - the iframe html page is closed (the
responseparameter is passed as false) - the
abortis terminated (theresponseparameter is passed as false) - the
timeoutis terminated (theresponseparameter is passed as false) - any error occurs during html resources loading (the
responseparameter is passed as false)
karmaHTML.index.onstatechange = function(ready,tag,status,statusText){
//some fireworks and magic here
}2. Parameters:
ready(Boolean) parameter passestrueif.htmlfile has been loaded correctly, otherwise it passesfalsetag(String) parameter indicates which.htmlfile's state has been changed; (withkarmaHTML.index.onstatechangeit always will beindex)response(Number) parameter passes HTTP numerical response message, eg.200,404responseText(String) parameter passes HTTP textual response message, eg.OK,Not Found
3. Un-defining onstatechange:
To stop firing onstatechange defined function(), re-define onstatechange property with any other - than function - value type.
karmaHTML.index.onstatechange = null;
karmaHTML.index.onstatechange = false;
karmaHTML.index.onstatechange = "";syntax example
karmaHTML.index.onstatechange = function(ready){
if(ready) run_index_tests();
}
karmaHTML.tmpl.onstatechange = function(ready){
if(ready) run_tmpl_tests();
}
karmaHTML.index.open();
karmaHTML.tmpl.open();Also check out jasmine example
Common problems
1. fs glob Errors in your CMD
If you use Webpack, it is recommended to add node: {fs: "empty"} to your webpack config file, in order to avoid fs module problems when loading karma-html
Examples
1. Test your .html files of tag 'index' and 'tmpl' separately
karmaHTML.index.onstatechange = function(state){
if(state){
run_index_tests();
this.close(); //or karmaHTML.index.close();
this._root.tmpl.open(); //or karmaHTML.tmpl.open();
}
};
karmaHTML.tmpl.onstatechange = function(state){
if(state){
run_tmpl_tests();
this.close(); //or karmaHTML.tmpl.close();
}
};
karmaHTML.index.open();Step-by-step configuration
We will use Jasmine framework for testing, Mocha reporter to report our tests results in the terminal, karmaHTML package to test our html files, karma-jasmine-dom package to test DOM objects with DOM custom matchers and Chrome browser to run our html templates for testing.
1. Create new folder New project anywhere and create the following folders and files (empty) structure inside of it:
New project
├ tests
│ └ tests.js
├ karma.conf.js
└ index.html- Open the
New projectfolder and open your terminal there (with the location set toNew projectfolder) - Install neccessary packages with npm by executing the following command:
npm install karma karma-jasmine jasmine-core karma-chrome-launcher karma-mocha-reporter karma-html karma-jasmine-dom
- In the
karma.conf.jsfile add the following content:
module.exports = function(config) {
config.set({
files: [
{pattern: 'tests/*.js',watched:true,served:true,included:true}
],
//load karma-mocha-reporter and karma-html
reporters: ['mocha','karmaHTML'],
//load karma-jasmine-dom and karma-jasmine
frameworks: ['jasmine-dom','jasmine'],
//load karma-chrome-launcher
browsers: ['Chrome'],
client: {
//If false, Karma will not remove iframes upon the completion of running the tests
clearContext:false,
//karma-html configuration
karmaHTML: {
source: [
//indicate 'index.html' file that will be loaded in the browser
//the 'index' tag will be used to get the access to the Document object of 'index.html'
{src:'./index.html', tag:'index'}
],
auto: true
}
}
});
};- It should work just fine right now, run
karma startin the terminal and it should:- prompt the positive tests results in the terminal
- open the Chrome browser and display the iframe with our (empty)
index.htmltemplate
- Add the following HTML content example to our
index.htmlfile:
<!DOCTYPE html>
<html>
<head>
<title>New project</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<h3 id="header">Hello world!</h3>
<p id="paragraph">This is our html template.</p>
</body>
</html>- Add the following jasmine test suits into our
tests/tests.jsfile:
//describe, beforeAll, it, expext - are the Jasmine default methods
//karmaHTML is the karma-html package object with the access to all its features
describe("The index.html iframe document",function(){
beforeAll(function(done){
//load DOM custom matchers from karma-jasmine-dom package
jasmine.addMatchers(DOMCustomMatchers);
//lets open our 'index.html' file in the browser by 'index' tag as you specified in 'karma.conf.js'
karmaHTML.index.open();
//karmaHTML.index.onstatechange fires when the Document is loaded
//now the tests can be executed on the DOM
karmaHTML.index.onstatechange = function(ready){
//if the #Document is ready, fire tests
//the done() callback is the jasmine native async-support function
if(ready) done();
};
});
it("should be a real Document object",function(){
var _document = karmaHTML.index.document;
expect(_document.constructor.name).toEqual('HTMLDocument');
});
it("should contain paragraph and header that are the siblings",function(){
//karmaHTML.index.document gives the access to the Document object of 'index.html' file
var _document = karmaHTML.index.document;
//use all document javascript native methods on it
var header = _document.getElementById('header');
var paragraph = _document.getElementById('paragraph');
//these are the karma-jasmine-dom custom matchers
expect(paragraph).toBeNextSiblingOf(header);
expect(header).toBePreviousSiblingOf(paragraph);
});
});- Run
karma startagain in the terminal and it should:- prompt the positive two tests results in the terminal
- open the Chrome browser and display the iframe with our
index.htmltemplate loaded to run the tests on its DOM
- Read the documentation above to use all the features of
karma-html!