簡體   English   中英

Javascript單元測試-使用Jasmine監視自我調用功能

[英]Javascript unit testing - using Jasmine to spy on self-invoking function

使用這樣的javascript結構:

var myClass = function(myArgumentObject) {

    var vm = {
        myFunction: myFunction,
        myVariable: myVariable
    }
    return vm;

    myFunction() {
        myVariable = 1 + 1;
        myArgumentObject.aMethod();
    }

} (myArgumentObject);

如何(如果有的話)使用Jasmine框架監視(即模擬出)myArgumentObject,以便可以對myFunction進行單元測試?

這樣做:

it('test myFunction', function () {
    myClass.myFunction();
    expect(myClass.myVariable).toEqual(2);
});

失敗,因為嘗試在myArgumentObject上調用方法時出現錯誤。 我知道我可以使用jasmine.createSpy創建一個偽造的myArgumentObject,但看不到如何傳遞它。

好問題! 測試是關鍵。

您可以在測試中定義參數/輸入:

it ('test myClass function', function() {
    myArgumentObject = function() {
        this.aMethod: jasmine.createSpy();
    };
    // mock out initial values for your other variables here, eg myVariable

    spyOn(vm, 'myFunction').andCallThrough();

    myClass(myArgumentObject)

    expect(myArgumentObject.aMethod).toHaveBeenCalled()
    expect(vm.myVariable).toEqual(2)
});

請記住兩點-您的'return vm'語句將盡早切斷您的功能-您將不需要它。

您應該盡早定義變量,以免出錯。 考慮將myFunction移動到“ vm”對象上方。

因此,我假設以下情況,您有一個名為myArgumentObject的全局變量,其具有函數aMethod 然后,您可以像這樣使用茉莉花監視此功能。

it('test myFunction', function () {
  spyOn(myArgumentObject, 'aMethod')
  myClass.myFunction();
  expect(myClass.myVariable).toEqual(2);
});

但是,如果沒有gloabl變量,則無法測試,因為然后undefined會傳遞給測試,並且它將始終失敗,因為您無法在函數范圍內更改私有變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM