【问题标题】:Using QUnit to test if item has a certain class使用 QUnit 测试 item 是否具有某个类
【发布时间】:2016-04-12 14:02:26
【问题描述】:

我创建了一个密码输入模块,它有几个正则表达式和一个列表,告诉用户要满足哪些要求才能创建密码,也就是提交表单。我正在向 keyup 上的每个要求列表项添加/删除一个类,具体取决于它是否满足要求。

我正在使用 QUnit 来测试这些元素是否获得类。有任何想法吗?

代码笔: http://codepen.io/eplehans/pen/xVYMLp

HTML 大致如下:

<label for="password">Password input</label>
<input pattern="(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[a-z]).*$" id="password" name="password" type="password">

<ul class="input-requirements-list">
    <li class="input-requirements-list__item" data-psw-req="8-chars">8 characters minimum</li>
    <li class="input-requirements-list__item" data-psw-req="1-special-char">1 special character</li>
</ul>`

JS 大致是这样的:

function passwordRegEx($input, $list) {
    var currentVal;
    var affirmativeClass = 'affirmative';

    function okCheck($el, affirmative) {
        if (affirmative === true) {
        $el.addClass(affirmativeClass);
        } else {
            $el.removeClass(affirmativeClass);
        }
    }

    //Requirements as shown in requirements list underneath password input
    var $charChecker = $list.find('[data-psw-req="8-chars"]'),
    $specialCharChecker = $list.find('[data-psw-req="1-special-char"]');

    $input.keyup(function() {
        currentVal = $input.val();

        //More than 8 characters
        if (currentVal.length >= 8) {
           okCheck($charChecker, true);
        } else {
        okCheck($charChecker, false);
        }

        //Special character match
        if (currentVal.match(/[-!$%^&*()@øæåØÆÅ_+|~=`{}\[\]:";'<>?,.\/]/)) {
           okCheck($specialCharChecker, true);
        } else {
          okCheck($specialCharChecker, false);
        }
    });
}

QUnit 测试如下所示:

var $passwordInput = $('#password'),
    affirmativeClass = 'affirmative';
var $reqItem1 = $('li[data-psw-req="8-chars"]'),
    reqItem2 = $('li[data-psw-req="1-special-char]');

QUnit.test("Expect [data-psw-req=8-chars] to have class when requirements are met", function(assert) {
    $passwordInput.val('123456789dddddd');
    ok($reqItem1.hasClass(affirmativeClass), true, "It has the class!");
});

【问题讨论】:

    标签: javascript jquery unit-testing input qunit


    【解决方案1】:

    您必须触发与用户在写入时触发的事件相同的事件。这里我触发了 keyup 事件,就像用户在完成输入时所做的一样。

    http://codepen.io/tomkarachristos/pen/MyQxbQ

    QUnit.test("Expect li[data-psw-req=8-chars] to have affirmative class when password input has 8 or more characters", function(assert) {
    
        $passwordInput.val('123456789dddddd');
        $passwordInput.keyup();
        ok($reqItem1.hasClass(affirmativeClass), true, "It has the class!");
    
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      • 2015-09-21
      • 1970-01-01
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多