如何在单元测试期间调用某个javascript函数

时间:2009-11-24 00:46:27

标签: javascript unit-testing mocking

我正在使用JsTestDriver和一些Jack(仅在需要时)。有没有人知道如何验证在单元测试期间是否调用了javascript函数?

E.g。

function MainFunction()
{
    var someElement = ''; // or = some other type
    anotherFunction(someElement);
}

在测试代码中:

Test.prototype.test_mainFunction()
{
    MainFunction();
    // TODO how to verify anotherFunction(someElement) (and its logic) has been called?
}

感谢。

1 个答案:

答案 0 :(得分:8)

JavaScript是一种非常强大的语言,您可以在运行时更改行为 您可以在测试期间用您自己的替换anotherFunction并验证它是否已被调用:

Test.prototype.test_mainFunction()
{   
    // Arrange 
    var hasBeenCalled = false;
    var old = anotherFunction;
    anotherFunction = function() {
       old();
       hasBeenCalled = true;
    };

    // Act
    MainFunction();

    // Assert (with JsUnit)
    assertEquals("Should be called", true, hasBeenCalled);

    // TearDown
    anotherFunction = old;
}

注释:您应该知道此测试会修改全局功能,如果它失败,则可能无法始终恢复它。
你可能最好选择JsMock 但是为了使用它,您需要将功能分开并将它们放入对象中,因此 根本不会有任何全局数据