Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编写测试其他函数的JavaScript测试将被调用,而不实际调用它们_Javascript_Angularjs_Unit Testing_Jasmine_Karma Runner - Fatal编程技术网

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

编写测试其他函数的JavaScript测试将被调用,而不实际调用它们,javascript,angularjs,unit-testing,jasmine,karma-runner,Javascript,Angularjs,Unit Testing,Jasmine,Karma Runner,我的任务是为另一个团队编写的AngularJS代码编写单元测试,该团队没有编写任何测试 他们已经编写了以下函数,但我不知道如何测试它 function showCallAlerts(callRecord, isInEditMode, callBack) { var callAlerts = populateCallAlertOnEditCall(callRecord.callAlert); var callModalInstance = openAlertModalInstanc

我的任务是为另一个团队编写的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实际上应该被调用,我将单独测试该方法,只是它被调用了


我已经设法编写了测试简单函数的代码,但没有一个像这样的,因此任何帮助都将不胜感激。今天下午的大部分时间我都在试图弄清楚它。

测试调用了什么,你可以使用
间谍

您的断言如下所示:

spyOn(obj, 'populateCallAlertOnEditCall')
expect(obj.method).toHaveBeenCalled()
更新:

populateCallAlertOnEditCall = {}
spyOn(obj, 'populateCallAlertOnEditCall.result')
expect(obj.method).toHaveBeenCalled()

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

您的断言如下所示:

spyOn(obj, 'populateCallAlertOnEditCall')
expect(obj.method).toHaveBeenCalled()
更新:

populateCallAlertOnEditCall = {}
spyOn(obj, 'populateCallAlertOnEditCall.result')
expect(obj.method).toHaveBeenCalled()

你想要的那种行为叫做

在《茉莉花》中,模拟是用间谍对象完成的,你可以阅读更多关于这些对象的内容

基本上,您可以使用mock来测试是否使用预期参数调用了函数

var xhr = mock( XMLHttpRequest );

xhr.send();

expect( xhr.send ).toHaveBeenCalled();

你想要的那种行为叫做

在《茉莉花》中,模拟是用间谍对象完成的,你可以阅读更多关于这些对象的内容

基本上,您可以使用mock来测试是否使用预期参数调用了函数

var xhr = mock( XMLHttpRequest );

xhr.send();

expect( xhr.send ).toHaveBeenCalled();

您可以使用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.
  }));

 });

您可以使用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.
  }));

 });

谢谢我不能理解的是callModalInstance.result。然后,我不想要真正的modal实例,我想创建一个假的实例,但是让它继续使用代码。你可能想监视
callModalInstance的
结果
方法
spy和mock是不同的。关于这篇文章的更多细节:创建一个空对象,并在result方法上
spy
:谢谢。我不能理解的是callModalInstance.result。然后,我不想要真正的modal实例,我想创建一个假的实例,但是让它继续使用代码。你可能想监视
callModalInstance的
结果
方法
spy和mock是不同的。有关此帖子的更多详细信息:创建一个空对象,并在result方法上执行
spy