Tag: qunit

QUnit测试同步ajax调用

有人可以告诉我是否需要使用asyncTest()来测试同步ajax调用,或者test()可以在没有start()和stop()的情况下使用。 考虑一下: var Class= function () { var init = function () { amplify.request.define(‘students’, ‘ajax’, { url: ‘/methods/GetStudentsList’, dataType: ‘json’, type: ‘GET’, async:false }); }; Students = function (branch, callback) { init(); return amplify.request(“students”, { branchID: branch }, callback.success, callback.error ); }; return { Students: Students }; } (); 当’async’属性为’true’和’false’时,我们如何为Class.Students()方法编写测试用例?

QUnit for javascript测试事件

我是javascript测试的新手。 我能够测试qunit的所有其他function。 但无法弄清楚如何使用qunit来测试事件处理程序的function。 在jquery event.js测试套件中看到一个用于触发器,绑定和委托函数的示例后,我尝试了下面的内容。 test(‘Event Handling’, function () { var hai = function() { console.log(‘Clicked’); ok(true, ‘click event triggered’); }; eventLib.addEvent(document.getElementById(‘qunit-header’), ‘click’, hai); $(‘#qunit-header’).trigger(‘click’); ok(true, ‘It happend’); }); 这里eventLib是我编写的用于附加和分离事件的函数。 但是上面的代码似乎没有在qunit html接口上给出任何类型的输出[除了它发生]。 但是,如果我手动单击标题,事件处理程序将记录到控制台。 我正在使用jquery v1.6.2

在QUnit测试中无法触发的事件

我是QUnit的新手。 我正在使用jQuery(使用1.4.2和1.5.1测试)和最新的QUnit。 我可以在单个测试中触发事件,但之后的任何测试都会失败。 这是一个简化的复制品: // code under test – “#Test1” is just an empty div $(document).ready(function() { $(‘#Test1’).mouseenter(function(e) { console.log(‘ENTER’);}); $(‘#Test1’).mouseleave(function(e) { console.log(‘LEAVE’);}); }); // tests test(‘enter’, function() { $(‘#Test1’).mouseenter(); }); test(‘leave’, function() { $(‘#Test1’).mouseleave(); }); 当我运行测试时,控制台只输出ENTER。 但是,如果我使用单个测试…… test(‘enterleave’, function() { $(‘#Test1’).mouseenter(); $(‘#Test1’).mouseleave(); }); …控制台输出ENTER和LEAVE。 我尝试过使用QUnit的triggerEvent,jQuery.trigger等无济于事。 此问题在多个浏览器上进行了重复。 我是否正确测试了事件? 完整的repro: http : //jsbin.com/obehu5/edit 。

从QUnit调用时,调用trigger()并不总是触发

虽然我过去使用过QUnit,但是自从我真正使用它以来已经有一年了,所以我希望这是微不足道的! 我有一堆QUnit测试工作得非常好,除了每次加载页面失败的测试。 如果我刷新,测试工作,但如果我再次刷新它会中断! 它变得可以预测,但我不明白为什么它不起作用。 有问题的测试应该使用trigger(‘change’)事件,但这只会在每隔一段时间触发一次。 我有一个动态填充的select ,我将change事件绑定到。 它所做的就是将值保存到localStorage并且测试我刚刚检查了已经设置的值。 示例HTML: Please choose 示例JS: $(document).ready(function() { var data = { 1: ‘Option 1’, 2: ‘Option 2’, 3: ‘Option 3’ } for(var d in data) { $(‘#options’).append($(”).val(d).text(data[d])); } $(‘#options’).on(‘change’, function() { $(‘#result’).text(this.value); if(this.value != ”) { localStorage.setItem(‘optionValue’) = this.value; } else { throw ‘You must choose a team’; […]

如何使用Sinon.js将附加到’this’对象的方法存根?

我正在尝试测试下面附带的’onInit’函数: function (jQuery, Controller, JSONModel) { “use strict”; var controls; var mainController = Controller.extend(“tool.controller.Main”, { onInit: function(oEvent) { var inputModel = new JSONModel(“./model/inputs.json”); var productsModel = new JSONModel(“./model/products.json”); this.getView().setModel(inputModel, “inputModel”); this.getView().setModel(productsModel); controls = viewControls.main.apply(this); }, … 目的 特别是对于这个函数,我只需要测试调用’setModel’和’main’方法。 我面临的问题 为了将这个’onInit’函数正确地进行unit testing,我需要使用stub / mock进行一些依赖。 具体来说,这些依赖关系将如下: ‘this’关键字/对象,附加了’getView’方法 ‘JSONModel’对象构造函数 我坚持理解如何模仿上述内容。 以下是我初学者对Sinon.js的理解: QUnit.test(“‘onInit’ Function Test”, function(assert) { // Arrange […]

使用Zombie.jsvalidationQunit的结果

我正在使用Qunit进行测试驱动开发:在创建新函数时,我为它编写测试,创建函数,重新加载页面,如果所有测试都通过,我继续…虽然这在开始时工作正常,一段时间后,它开始成为一个耗时的过程,因为所有测试都需要几秒钟才能运行,而这是我每次刷新浏览器时都要等待的时间。 为了解决这个问题,我考虑引入Zombie.js来执行无头测试:想法是让Zombie.js不断检查网页(例如$ watch -n1 “node queryTheWebpage.js” )并报告给编码时Qunits的结果(偶尔,由于Zombie.js不是“真正的”浏览器,我会打开一个浏览器并手动检查页面进行validation)。 到目前为止,这里是我的节点/ Zombie代码片段: browser.visit(“http://localhost/mywebpage.html”, function () { var qunit_tests = browser.query(‘body’); console.log(qunit_tests.innerHTML); }); 在控制台输出中,我确实看到Qunit测试容器 但它是空的,这意味着当调用visit回调函数时,测试没有运行。 我试过使用wait函数等待测试运行,但是没有成功: function waitForQunitToEnd(window) { var last = window.document.querySelector(‘selectorOfMyLastTest’); var first_failed = window.document.querySelector(‘li.failed’); return (last || first_failed); } browser.visit(“http://localhost/mywebpage.html”, function () { browser.wait(waitForQunitToEnd, function() { var qunit_tests = browser.query(‘body’); console.log(qunit_tests.innerHTML); // still gives me empty […]

为什么要附加到窗口

我正在查看qunit的代码。 我的问题是你为什么要通过属性将qunit对象附加到window对象。 这是文件的链接。 看第11行。 如果我使用firebug查看unit testing运行,您可以看到它是窗口的属性。 [编辑]补充:是否有特定的参考资料,用于在特定命名空间中声明事物的最佳实践?

Qun ajax上的Qunitunit testing错误

我已经为ajax suing Qunit编写了unit testing,但是得到的错误就像 Error: assertion outside test context, was .success@http://test.loc/assets/test/widget-add-or-edit-test.js:227 b.Callbacks/c@http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js:3 b.Callbacks/p.fireWith@http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js:3 k@http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js:5 .send/r@http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js:5 Source: http://code.jquery.com/qunit/qunit-1.11.0.js:899 我的测试代码是 test( “Widget.updateAxisTypeAjax x”, function() { stop(); Widget.updateAxisTypeAjax( { axis : ‘x’ , x_id : 179, y_id : 175 } ,{ success : function( response ){ ok( true, “updateAxisTypeAjax Success PASS!”); equal( typeof response , “object” , “updateAxisTypeAjax […]

测试JQueryUI小部件的QUnit测试中是否可见

这对其他人来说可能是显而易见的,但我没有通过搜索找到它,所以在这里发布问题和一个可能的答案。 背景: 使用小部件工厂自定义JQuery UI小部件 在窗口小部件中,某些元素会根据其他数据/选项隐藏或显示。 创建unit testing以validation它们是否正确显示/隐藏。 我认为我的unit testing可以在内存中创建自己的元素,类似于这个旧答案 。 从此示例中删除了实际的小部件: test( ‘show/hide’, 1, function() { var somecondition = true; var div = $( ” ).hide(); if (somecondition) div.show(); equal( somecondition, div.is( “:visible” ) ); }); 测试失败,因为jQuery总是将div.is( “:visible” )为false。 我认为使用div.css(‘display’) == ‘none’将是一种解决方法。 不幸的是,这适用于Chrome,但不适用于Firefox。

使用夹具进行QUnit奇怪行为,测试交替失败并通过

我在QUnit中设置了以下内容: /* Dozen or so previous tests here */ test(“Test some markup generation”, function () { $(‘#qunit-fixture’).plugin(); // jQuery plugin: Generates a table var rows = $(‘#qunit-fixture table tbody tr’); count = rows.length; // Count the rows console.log(count); equal(count, “96”, “Expect the number of rows to be 96”); }); 当它运行时,或者当我刷新浏览器时,它交替地使该测试显示count = 0,或者通过它并且失败所有先前的测试。 测试之外没有定义全局变量。 如果我手动将计数设置为96,一切都很顺利,或者如果我删除了这个测试,或者所有以前的测试,一切都会通过。 我想知道是否有人遇到过这种行为? […]