Unit testing 指令内部的单元测试指令

Unit testing 指令内部的单元测试指令,unit-testing,angularjs,angularjs-directive,Unit Testing,Angularjs,Angularjs Directive,我在单元测试包装ng grid组件的指令时遇到了问题 我写了一个朋克来说明这个问题: 我知道有很多代码,但我不能减少更多 基本上,有一个定制的grid指令,用于从AngularUI中包装ng网格组件。我之所以这样做是因为我的应用程序中有很多网格,我不会复制网格的配置 显示在测试结果顶部的网格使用此指令。因此,您可以看到它工作正常:) 然而,关于如何测试这个指令,我可能遗漏了一些东西。 我编写了一个简单的测试,断言第一行第一列显示“Martoni”,但它失败了。使用ng grid指令的相同测试通过

我在单元测试包装ng grid组件的指令时遇到了问题

我写了一个朋克来说明这个问题:

我知道有很多代码,但我不能减少更多

基本上,有一个定制的grid指令,用于从AngularUI中包装ng网格组件。我之所以这样做是因为我的应用程序中有很多网格,我不会复制网格的配置

显示在测试结果顶部的网格使用此指令。因此,您可以看到它工作正常:)

然而,关于如何测试这个指令,我可能遗漏了一些东西。 我编写了一个简单的测试,断言第一行第一列显示“Martoni”,但它失败了。使用ng grid指令的相同测试通过

知道我的测试代码出了什么问题吗?

在递归调用指令(或者至少是嵌套指令)之前,我遇到过一些问题,特别是当它们使用
$compile
服务时(尤其是
ng repeat
)。我确信那里有一个bug,但我还没有花时间找到一个孤立的案例。无论如何,我认为你发现的是某种bug,但有一个简单的解决方法

如果您查看ngGrid的源代码,您将看到只有当宽度足够大时才添加列。当我在你的第二个例子中进行一步时,
w
是否定的,这导致了
addCol
从未被调用

var w = col.width + colwidths;
if (col.pinned) {
    addCol(col);
    var newLeft = i > 0 ? (scrollLeft + totalLeft) : scrollLeft;
    domUtilityService.setColLeft(col, newLeft, self);
    totalLeft += col.width;
} else {
    if (w >= scrollLeft) {
        if (colwidths <= scrollLeft + self.rootDim.outerWidth) {
            addCol(col);
        }
    }
}
colwidths += col.width;
然后进行清理:

afterEach(function () {
    angular.element(elm).remove();
});
我不知道这是否是有意的,但您在第一个单元测试中调用了
$rootScope
上的
$new()
,但没有使用该结果进行编译,而您在第二个单元测试中调用了它

afterEach(function () {
    angular.element(elm).remove();
});