2015-10-07 32 views
1

我正在使用Jasmine(v2.2.0)進行測試,並且我試圖監視一個方法,該方法預計會被第一個參數的特定數據調用,第二種是未知類型。Node JS Jasmine使用jasmine.any測試多個類型()

我熟悉spies和間諜.toHaveBeenCalledWith()語法,並與jasmine.any()加入它可能是這個樣子:

expect(my.spy).toHaveBeenCalledWith('startMenu', jasmine.any(String)); 

但我無法找到對付多種類型的方法。 我正在尋找的是執行相同的動作,其中第二個參數是任何類型的方法,和一樣好,當第二參數是一些類型中的一種,如:

// Any type is okay: 
expect(my.spy).toHaveBeenCalledWith('startMenu', jasmine.any()); 

// String or number only: 
expect(my.spy).toHaveBeenCalledWith('startMenu', jasmine.any(String OR Number)); 

不用提到,前面的例子不是工作代碼,它們正是我正在尋找正確的語法。

另一方面,我發現jasmine.anything()這將處理幾乎什麼,但失敗undefined

任何形式的幫助,非常感謝。

回答

1

我還沒有找到一種方法,只要使用jasmine.any但你可以實現一個自定義匹配類似的東西要做到這一點:

toBeStringOrNumber : function() { 
    return { 
    compare : function (actual, expected) { 
     return { 
     pass : (typeof actual == 'string' || typeof actual == 'number'), 
     message : actual + ' is not a string or a number' 
     }; 
    } 
    }; 
} 

然後調用它的實際參數:

expect(my.spy).calls.argsFor(0)[1].toBeStringOrNumber();