当前位置: 首页 > 知识库问答 >
问题:

编写测试其他函数的JavaScript测试将被调用,而不实际调用它们

瞿博易
2023-03-14

我的任务是为另一个团队编写的AngularJS代码编写单元测试,该团队没有编写任何测试

他们已经编写了以下函数,但我不知道如何测试它

function showCallAlerts(callRecord, isInEditMode, callBack) {
    var callAlerts = populateCallAlertOnEditCall(callRecord.callAlert);
    var callModalInstance = openAlertModalInstance('Call', callAlerts, callBack);
    if (callModalInstance !== undefined && callModalInstance !== null) {
    callModalInstance.result.then(function() {
        // Show equipment alerts based on company details
        showEquipmentAlertsBasedOnCompanyDetails(callRecord, isInEditMode, callBack);
    });
    } else {
    // Show equipment alerts based on company details
    showEquipmentAlertsBasedOnCompanyDetails(callRecord, isInEditMode, callBack);
    }
}

我需要测试每个函数是否被调用,而不是担心它们做什么,因为我将分别测试它们,只是它们被调用。

调用populateCallAlertOnEditCall时,需要返回空数组或其中包含某些项的数组

调用openAlertModalInstance时,它需要返回未定义的或传递到showEquipmentAlertsBasedOnCompanyDetails的内容

showEquipmentAlertsBasedOnCompanyDetails实际上应该被调用,我将单独测试该方法,只是它被调用了

我已经设法写了一些代码来测试简单的函数,但没有一个像这样的,所以任何帮助都将非常感激,我花了今天下午的大部分时间试图弄清楚

共有3个答案

华善
2023-03-14

你想要的那种行为叫做嘲弄

在《茉莉花》中,嘲笑是通过间谍对象完成的,你可以在这里读到更多关于它们的信息

基本上,您可以使用模拟来测试函数是否用预期的参数调用。

var xhr = mock( XMLHttpRequest );

xhr.send();

expect( xhr.send ).toHaveBeenCalled();
蒙化
2023-03-14

在测试某个东西是否被调用时,可以使用Spy

您的断言如下所示:

spyOn(obj, 'populateCallAlertOnEditCall')
expect(obj.method).toHaveBeenCalled()

更新:

populateCallAlertOnEditCall = {}
spyOn(obj, 'populateCallAlertOnEditCall.result')
expect(obj.method).toHaveBeenCalled()
李永寿
2023-03-14

您可以使用jasmine来模拟您对测试不感兴趣的函数调用。例如,您可以告诉jasmine在每次调用“populateCallAlertOnEditCall”时返回一个空数组。我将写一个例子,也许能给你一些启示:

describe('My Test Spec', function() {
   var myController;

   ...

   beforeEach( inject(($controller) => {
        myController = $controller("myControllerName");
   }));

  it('Testing showCallAlerts when populateCallAlertOnEditCall returns an empty array', inject(function($controller) {
        //setup
        //this will replace every call to populateCallAlertOnEditCall with
        //the function inside callFake
        spyOn(myController, 'populateCallAlertOnEditCall ').and.callFake(function() {
              return []; //returning an empty array.
        });

        //action
        myController.showCallAlerts(...);

        //assert
        //Do your checking here.
  }));

  it('Testing showCallAlerts when populateCallAlertOnEditCall returns a non-empty array', inject(function($controller) {
        //setup
        //this will replace every call to populateCallAlertOnEditCall with
        //the function inside callFake
        spyOn(myController, 'populateCallAlertOnEditCall ').and.callFake(function() {
              return [1,2,3,4]; //returning a non-empty array.
        });

        //action
        myController.showCallAlerts(...);

        //assert
        //Do your checking here.
  }));

 });
 类似资料:
  • 我使用这本优秀的书(Python中的测试驱动开发)发现了Python上的TDD,到目前为止,我很喜欢它。 但是,我有一个关于创建单元测试的方式的问题。 让我们想象一下这样的事情: 如果我想测试A,它会非常简单:我将在我的单元测试中手动创建一个对象,并测试它,类似于这样: 但是,如何测试B?我可以看到这样的方式: 手动创建modified_MyObject并用它来测试B 在testB()中使用A()

  • 我正在测试路由器,有两个函数,我需要测试第一个函数是否被调用,第二个函数是否被调用。有方法

  • 所以我肯定有类似的东西在那里,但我已经搜索了一个小时,还没有找到确切的我要找的东西。假设我有一个这样的类: 我该如何制作这样的作品?

  • 实际上,它的测试如果eat方法对宠物有效,但我也需要检查feedPet方法对玩家也有效。 任何想法或建议都非常感谢。

  • 假设我有两个html文件具有如下功能: 我想从a.html直接指向B.html,然后直接调用函数B。我怎样才能做到?。因为我想要将JSON字符串从函数A传递到函数B,而不是使用window.onload()或$(document).ready()。 我将我的JSON字符串存储到本地存储,并将用户引导到b.html。然后函数B将读取本地存储并直接处理数据。

  • 问题内容: 我正在使用 “ go test -v ”运行一堆单元测试。我想用delve调试它们。当我尝试运行调试器时,出现 “无法调试非主程序包” 错误。因此,如何使用delve调试器调试单元测试? 问题答案: 用途: 您还可以通过选择要运行的测试(就像)。 在内部,这与Flimzy的答案相同(它使用编译测试二进制文件),但更加精简,不会留下.test文件供您清理。