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

标签 javascript unit-testing mocking

我正在使用 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 是一种非常强大的语言,您可以在运行时更改行为。
您可以在测试期间用您自己的函数替换另一个函数并验证它是否已被调用:

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为此。
但是为了使用它,您需要将函数分开并将它们放入对象中,因此您根本不会有任何全局数据

关于javascript - 如何在单元测试期间验证已调用某个javascript函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1787107/

相关文章:

java - 使用 jUnit 测试每个开关/外壳

python-2.7 - 从上下文管理器创建的对象中模拟函数

javascript - 检查值是否是数字做某事

Javascript - 数组 - 将一个数组中的值分配给另一个数组中的字符串

javascript - 解析字符串并将元素存储到数组中

javascript - 等距 map 上的平滑角色移动

java - 用于单元测试的 Play Framework 2 Java 模拟插件

mysql - 使用 MYSQL DB,使用 HSQLDB 进行单元测试 = 问题

java - mockito 拒绝将 TypeSafeMatcher 与通用方法 API 配对

java - 使用 Mockito 和 jUnit 为具有两个 HTTP 调用的方法编写单元测试