gpt4 book ai didi

javascript - 如何在backbone.js中为事件编写单元测试

转载 作者:行者123 更新时间:2023-12-03 05:54:28 25 4
gpt4 key购买 nike

我从编写单元测试开始我的冒险,所以请宽容。在我的应用程序中,我使用 jQuery、backbone.js 和 underscore.js 进行测试 mocha.js 和 chai.js。我有问题,因为我不知道如何使用此工具测试事件。 Fox 示例我有更改输入值的函数。它在更改复选框值后调用。

test.html 文件:

<!DOCTYPE html>
<html>
<head>
<title>Backbone.js Tests</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<link rel="stylesheet" href="js/lib/mocha.css" />
<script src="js/lib/mocha.js"></script>
<script src="js/lib/chai.js"></script>
<!-- <script src="js/lib/sinon.js"></script> -->
<script>
// Setup
var expect = chai.expect;
mocha.setup('bdd');

// Run tests on window load event.
window.onload = function () {
(window.mochaPhantomJS || mocha).run();
};
</script>

<!-- App code -->
<script src="../public/static/js/libs/jquery-2.1.4.min.js"></script>
<script src="../public/static/js/libs/js.cookie-2.1.0.min.js"></script>
<script src="../public/static/js/libs/bootstrap.min.js"></script>
<script src="../public/static/js/libs/underscore-min.js"></script>
<script src="../public/static/js/libs/backbone-min.js"></script>
<script src="../public/static/js/libs/backbone-relational.min.js"></script>
<script src="../public/static/js/libs/backbone-super.min.js"></script>
<script src="../public/static/js/libs/handlebars-v4.0.5.min.js"></script>
<script src="../public/static/js/application.js"></script>
<script src="../public/static/js/main.js"></script>
<script src="../public/static/js/views/register.js"></script>
<script src="../public/static/js/views/modals/sign-in-modal.js"></script>
<script src="../public/static/js/views/modals/sign-up-modal.js"></script>
<script src="../public/static/js/helpers/forms.js"></script>
<script src="../public/static/js/helpers/alerts.js"></script>
<script src="../public/static/js/helpers/inpage-alerts.js"></script>
<script src="../public/static/js/collections.js"></script>
<script src="../public/static/js/models.js"></script>
<script src="../public/static/js/kodilla.lib.js"></script>
<script src="../public/static/js/views/knowledge-base.js"></script>
<script src="../public/static/js/libs/tether.min.js"></script>

<!-- Tests -->
<script src="js/spec/register.spec.js"></script>

</head>
<body>
<div id="mocha"></div>
</body>
</html>

register.js 文件:

App.Views.Register = Backbone.View.extend({
events: {
'click input[name="terms"]' : 'changeTermsConfirmation',
'click [type=submit]': 'onSubmitForm'
},
initialize: function(options) {
this.$termsConfirmedAtHidden = this.$('input[name="terms_confirmed_at"]');
},
changeTermsConfirmation: function(e) {
if ($(e.currentTarget).is(":checked")) {
this.$termsConfirmedAtHidden.val(Math.floor(Date.now() / 1000));
} else {
this.$termsConfirmedAtHidden.val('');
}
},
onSubmitForm: function() {
if (!this.$el.find('input[name="terms"]').is(':checked')) {
analytics.track('auth_register_not_checked_terms');
}
}
});

register.spec.js 文件:

$(document).ready(function() {

describe('Register Form', function() {

App.registerView = new App.Views.Register();

describe('initialize() function', function() {
it('Should initialize this.$termsConfirmedAtHidden variable by HTML object', function () {
expect(App.registerView.$termsConfirmedAtHidden).to.be.a('object');
});
});

describe('changeTermsConfirmation() function', function() {
it('Should set value of $termsConfirmedAtHidden element', function () {
//how to test this function
});
});

});

});

我的问题是如何为“changeTermsConfirmation()”函数编写合理的单元测试。我将感谢其他人的注释和使用技巧。

最佳答案

也许我可以帮助您提供一些可能帮助您入门的信息。

Mocha/Chai 是模块化的,因此首先您需要在项目中包含一个模拟/ spy 库。大多数人的默认选择似乎是 Sinon (以及 Sinon-Chai )。

然后您可以检查并单元测试您的事件处理程序:

  • 为您的测试创建一个 View 实例。
  • 在您要测试的 View 方法上设置 spy (在您的情况下为 changeTermsConfirmation)
  • 通过在 View 实例上调用 trigger 来触发事件
  • 您的期望可以检查您的方法被调用的频率、使用哪些参数以及其返回值是什么。

如果您不关心这些,只想测试 View 状态更改,则不需要 spy (并且不需要包含像 Sinon 这样的库)。只需创建一个 View 实例,调用trigger并检查结果。

关于javascript - 如何在backbone.js中为事件编写单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39997685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com