Tag: jasmine

如何监视jQuery AJAX请求?

以下两种实现ajaxRequest(1)(2)的方法应该是等效的。 话说回来: 为什么unit testing(3)validation回调是否已执行,成功进入(1)并失败进入(2)? 我应该如何重写测试(3)来监视(2)中的成功回调? 如果我尝试使用sinon和代码(2)来stub jQuery.ajax ,我会收到错误。 我应该怎么解决? 请参阅代码(3)中的注释以获取更多详细信息。 (1) ajaxRequest: function (message, callback) { return $.ajax({ url: backendRouter.generate(‘feedback_send’), type: ‘POST’, dataType: ‘json’, data: { message: message }, success: callback }); } (2) ajaxRequest: function (message, callback) { return $.ajax({ url: backendRouter.generate(‘feedback_send’), type: ‘POST’, dataType: ‘json’, data: { message: message } }).success(callback); } (3) […]

用于动态字符计数的Jasmineunit testing用例

任何人都可以给我编写测试用例的示例,以检查是否在jquery和jasmine中调用了keyup事件中的函数。 我对jquery和jasmine相当新,所以很抱歉这些错误。 当用户输入输入字段中的字符时,此程序显示剩余的字符数。我遇到了我尝试过的测试用例如下 fixture.html :这是夹具 script.js :这是包含计算剩余字符的代码的脚本文件 $(document).ready(function () { var txt = $(‘#text’); var remainingChar = $(‘#count’); var maxLengthBox = txt.attr(‘maxLength’); remainingChar.html(maxLengthBox); txt.keyup(function () { updateChars(remainingChar, maxLengthBox, txt) }); }); function updateChars(remainingChar, maxLengthBox, txt) { var remChar = maxLengthBox – $(txt).val().length; if (remChar < 0) { remChar = 0; } remainingChar.html(remChar); return remChar; } […]

Jasmine出错 – 预期事件点击已在#DIV_ID上触发

我在这个链接中引用了在Jasmine框架中开发测试工具时触发事件: http://www.htmlgoodies.com/beyond/javascript/js-ref/testing-dom-events-using-jquery-and-jasmine-2.0.htm l 我试图在Jasmine框架中的#DIV_ID上触发click事件后获取新应用的CSS属性。 我试过这段代码: spyEvent = spyOnEvent(‘#DIV_ID’, ‘click’); $(‘#DIV_ID’).trigger( “click” ); expect(‘click’).toHaveBeenTriggeredOn(‘#DIV_ID’); expect(spyEvent).toHaveBeenTriggered(); 但我收到错误: 预期事件点击已在#DIV_ID上触发 任何人帮我解决我的问题。 提前致谢。

在javascript认为文档“准备好”之前,如何让我的茉莉花测试装置加载?

我相当肯定问题是jquery绑定设置为在$(document).ready上运行没有可用的fixture html。 因此,当我发生的事件旨在通过jquery函数对DOM进行更改时,没有任何反应,并且我的测试失败了。 我在这里看到了这个问题的“解决方案”,但是那个对我有用的解决方案,需要改变我的工作jquery函数来绑定.live方法而不是.click方法。 我有两个问题。 首先,我不想更改我的工作代码,以便测试正确通过。 测试框架应该测试代码是否可以在应用程序中工作,其中DOM加载和javascript绑定以正确的顺序发生。 我对解决方案的第二个问题是.on和.delegate由于某种原因都不起作用,而且最终工作的唯一方法是使用当前正在弃用的.live方法。 总之,我想弄清楚如何更改我的测试或测试框架本身,以便在$(document).ready中运行的函数之前加载fixture。 我正在使用rails 3.2.8,我设置了两个不同的分支来试验茉莉花测试。 其中一个分支使用jasminerice gem,另一个使用jasmine-rails gem。 Javascript和jQuery(当使用.live方法时)测试所有这两个菜单中的正确传递。 以下是使用jasminerice的分支的描述: 以下是我的Gemfile.lock文件中描述jasmine和jQuery设置的行: jasminerice (0.0.9) coffee-rails haml jquery-rails (2.1.3) railties (>= 3.1.0, 0.14) Jasminerice默认包含jasmine-jquery扩展。 jasmine-jQuery扩展提供了我在测试中使用的toHaveText方法。 直接位于spec / javascripts目录中的测试文件jasmine_jquery_test.js包含以下内容: #= require application describe (“my basic jasmine jquery test”, function(){ beforeEach(function(){ $(‘My test link’).appendTo(‘body’); }); afterEach(function(){ $(‘a#test_link’).remove(); }); it (“does some basic jQuery […]

使用jasmine.js和sinon.js调用backbone.js click事件间谍

我正在尝试使用backbone.js,jasmine.js和sinon.js测试按钮单击。 但是以下测试用例失败了。 我正在使用间谍来追踪它是否被召唤。 你能帮我解决这个问题吗? 谢谢。 新任务模板 Add Task NewTaskView T.views.NewTaskView = Backbone.View.extend({ tagName: ‘section’, id: ‘new_task_section’, template : _.template ( $(“#new_task_template”).html() ), initialize: function(){ _.bindAll( this, ‘render’, ‘addTask’); }, events:{ “click #add_new_task” : “addTask” }, render: function(){ $(this.el).html( this.template() ); return this; }, addTask: function(event){ console.log(“addTask”); } }); 茉莉花测试案例 describe(“NewTaskView”, function(){ beforeEach( function(){ this.view = […]

存根jQuery选择器调用?

我正在努力改进unit testing我的JavaScript。 我有以下代码: var categoryVal = $(‘#category’).val(); if (categoryVal === ”) { doSomething(); } 我的测试#category器在页面上没有#category输入,那么我如何在这里存根/模拟jQuery选择器呢? 我已经查看了jasmin和sinon文档,但无法弄清楚如何让它们在这里工作,因为它们的存根操作对象,而$不是。

jQuery触发器(’click’)不能与Jasmine-jquery一起使用

这是我的测试代码: describe(“Login”, function(){ beforeEach(function(){ loadFixtures(‘login-fixture.html’); }) it(“should enable the button when checking ‘remember password'”, function(){ $(‘#remember’).trigger(‘click’); expect($(‘#keepIn’)).not.toBeDisabled(); }); }); 这是我的生产代码: $(document).ready(function(){ $(‘#remember’).click(function(e) { if($(‘#remember’).is(‘:checked’)) { $(‘#keepIn’).removeAttr(‘disabled’); } }); }); 这不起作用,生产代码永远不会被调用。 我已经在触发事件之前和之后发出警报,并且在触发之后选中了复选框,但是没有调用.click函数。 有关为什么会发生这种情况的任何想法?

如何使用jasmine测试已完成和失败的延迟对象

这是关于javascript提交请求的代码(1)。 以下是使用jasmine(2)模拟ajax请求的测试。 我想模仿服务器的行为。 有任何想法吗? 有关详细信息,请参阅(1)和(2)中的注释。 PS: 实际上,在这两种情况下都会调用fakeFunction的done和fail Deferred Object。 (1) submitForm: function () { // the server execute fail only if message.val() is empty // and I would like to mock this behaviour in (2) backendController.submitForm(message.val()).done(this.onSuccess).fail(this.onError); }, backendController.submitForm = function (message) { return $.ajax({ url: ‘some url’, type: ‘POST’, dataType: ‘json’, data: { message: message […]