javascript - How to load different html files in QUnit? - Stack Overflow

I'm using QUnit for unit testing js and jquery.My HTML looks like this:<!DOCTYPE html><

I'm using QUnit for unit testing js and jquery. My HTML looks like this:

<!DOCTYPE html>
<html>
<head>
<title>QUnit Test Suite</title>

 <script src="../lib/jquery.js"></script>
<link rel="stylesheet" href=".16.0.css" type="text/css" media="screen">

  <script type="text/javascript" src=".16.0.js"></script>

  <!--This is where I may have to add startPage.html--->
  <script src="../login.js"></script>

  <script src="../test/myTests.js"></script>


</head>
<body>
    <div id="qunit"></div>
    <div id="qunit-fixture"></div>
</body>
</html>

Currently, I'm adding login.js as shown and I'm getting references correctly to objects defined in login.js.

However, functions in login.js contains references to some dom elements defined in startPage.html which is located elsewhere.

So, if I say $('#login-btn'), it is throwing an error. Is there any way to fix this?

Can I (a) refer to startPage.html to my qunit page given above?
(b) refer to or load startPage.html in the file where I'm running tests (myTests.js):

QUnit.test( "a test", function( assert ) {
    assert.equal( 1, "1", "String '1' and number 1 have the same value" );//works
    assert.equal( login.abc, "abc", "Abc" );//works with attributes
    assert.equal(($("#userid").val()),'',  'Userid field is present');//fails
    assert.equal( login.ValidUserId(), true, "ValidUserId" );//fails with functions
});

Does QUnit provide any method to load Html/php files so they'll be defined prior to testing. Like 'fixtures' in jasmine?

EDIT: Please also tell what to do in case I have startPage.php

I'm using QUnit for unit testing js and jquery. My HTML looks like this:

<!DOCTYPE html>
<html>
<head>
<title>QUnit Test Suite</title>

 <script src="../lib/jquery.js"></script>
<link rel="stylesheet" href="http://code.jquery./qunit/qunit-1.16.0.css" type="text/css" media="screen">

  <script type="text/javascript" src="http://code.jquery./qunit/qunit-1.16.0.js"></script>

  <!--This is where I may have to add startPage.html--->
  <script src="../login.js"></script>

  <script src="../test/myTests.js"></script>


</head>
<body>
    <div id="qunit"></div>
    <div id="qunit-fixture"></div>
</body>
</html>

Currently, I'm adding login.js as shown and I'm getting references correctly to objects defined in login.js.

However, functions in login.js contains references to some dom elements defined in startPage.html which is located elsewhere.

So, if I say $('#login-btn'), it is throwing an error. Is there any way to fix this?

Can I (a) refer to startPage.html to my qunit page given above?
(b) refer to or load startPage.html in the file where I'm running tests (myTests.js):

QUnit.test( "a test", function( assert ) {
    assert.equal( 1, "1", "String '1' and number 1 have the same value" );//works
    assert.equal( login.abc, "abc", "Abc" );//works with attributes
    assert.equal(($("#userid").val()),'',  'Userid field is present');//fails
    assert.equal( login.ValidUserId(), true, "ValidUserId" );//fails with functions
});

Does QUnit provide any method to load Html/php files so they'll be defined prior to testing. Like 'fixtures' in jasmine?

EDIT: Please also tell what to do in case I have startPage.php

Share Improve this question edited Jan 9, 2015 at 13:34 Snowman asked Jan 8, 2015 at 11:55 SnowmanSnowman 2,5056 gold badges23 silver badges33 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 8

There are a couple of ways you can do this. The simplest is just to use the built-in QUnit "fixtures" element. In your QUnit HTML file, simply add any HTML you want in the div with the id of qunit-fixture. Any HTML you put in there will be reset to what it was on load before each test (automatically).

<html>
  ...
  <body>
    <div id='qunit'></div>
    <div id='qunit-fixture'>
      <!-- everything in here is reset before each test -->
      <form>
        <input id='userid' type='text'>
        <input id='login-btn' type='submit'>
      </form>
    </div>
  </body>
</html>

Note that the HTML in the fixture doesn't really have to match what you have in production, but obviously you can do that. Really, you should just be adding the minimal necessary HTML so that you can minimize any side effects on your tests.

The second option is to actually pull in the HTML from that login page and delay the start of the QUnit tests until the HTML loading is plete:

<html>
  <head>
    ...
    <script type="text/javascript" src="http://code.jquery./qunit/qunit-1.16.0.js"></script>
    <script>
    // tell QUnit you're not ready to start right away...
    QUnit.config.autostart = false;

    $.ajax({
      url: '/path/to/startPage.html',
      dataType: 'html',
      success: function(html) {
        // find specific elements you want...
        var elem = $(html).find(...);
        $('#qunit-fixture').append(elem);

        QUnit.start();  // ...tell QUnit you're ready to go
      }
    });
    </script>

    ...
  </head>

  ...
</html>

Another way to do this without using jquery is as follows

QUnit.config.autostart = false;

window.onload = function() {
    var xhr  = new XMLHttpRequest();
    if (xhr) {
        xhr.onloadend = function () {
            if(xhr.status == 200) {
                var txt = xhr.responseText;
                var start = txt.indexOf('<body>')+6;
                var end = txt.indexOf('</body>');;
                var body_text = txt.substring(start, end);
                var qunit_fixture_body = document.getElementById('qunit-fixture');
                qunit_fixture_body.innerHTML = body_text;
            }
            QUnit.start();
        }

        xhr.open("GET", "index.html");
        xhr.send();
    } else {
        QUnit.start(); //If getting the html file from server fails run tests and fail anyway
    }
}

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744324997a4568604.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信