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

例如。

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?
}

谢谢。

最佳答案

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
但是,要使用它,您需要分离功能并将其放入对象中,因此根本没有任何全局数据

10-02 04:12