对象中定义的JS函数作用域不适用于代码覆盖范围

问题描述 投票:1回答:1

我有一个在对象侧面定义的功能。我已经使用Qunit编写测试用例。当我尝试生成代码覆盖率报告时,它给了我错误,未定义var测试。

enter image description here

JS文件

$(function(){
var obj = {
        convertPostCode: function (postcode) {
            var len = postcode.length,
                index = 0;
            switch (len) {
                case 5:
                    index = 2;
                    break;
                case 6:
                    index = 3;
                    break;
                case 7:
                    index = 4;
                    break;
                default:
                    break;
            }
            return postcode.substr(0, index) + " " + postcode.substr(index);
        }
    }
});

Qunit测试用例

QUnit.test("convertPostCodeFromat", function (assert) {
    var postcode;
    postcode = "HA11PQ";
    assert.equal(obj.convertPostCode(postcode), "HA1 1PQ", "Postcode is " + postcode + ". Returns - " + obj.convertPostCode(postcode) + ". We expect return true");
});
javascript code-coverage qunit
1个回答
0
投票

首先$是jquery,将第一个参数视为选择器,但仍执行该函数,但返回一个jquery对象。

其次,obj是在该函数范围内定义的,在您的测试范围内将不可用。

[使其可用,在与测试相同的级别或比测试高的一个或多个级别之外定义obj,然后在$内部的函数内设置其值

示例

   var obj;
$(function(){
 obj = {
        convertPostCode: function (postcode) {
            var len = postcode.length,
                index = 0;
            switch (len) {
                case 5:
                    index = 2;
                    break;
                case 6:
                    index = 3;
                    break;
                case 7:
                    index = 4;
                    break;
                default:
                    break;
            }
            return postcode.substr(0, index) + " " + postcode.substr(index);
        }
    }
});

假设测试处于同一级别,那么您现在应该可以访问obj

© www.soinside.com 2019 - 2024. All rights reserved.