簡體   English   中英

如何在 Jasmine 中測試 Typescript function?

[英]How do you test a Typescript function in Jasmine?

這是一個直截了當的問題,但我找不到答案。 Jasmine 文檔可以改進。 它主要展示了監視模擬數據和函數的示例,但我想測試我編寫的 function。 否則,我實際上在測試什么? 當我使用 Pipes 時,我發現它更加直接,因為我所要做的就是使用 new 關鍵字實例化 pipe。 然后斷言它返回我所期望的。 例如

const test = pipe.transform('8726324632');

expect(test).toEqual('872-632-4632');`

但是,功能似乎不起作用。 采取以下代碼:

export function getKeyValueOfAttributesFromElement(el) {
    const attributeMap = {};
    Object.keys(el.attributes)
        .forEach(key => {
            attributeMap[el.attributes[key].nodeName] = el.attributes[key].value;
        });

    return attributeMap;
};

// 我的測試

import { getKeyValueOfAttributesFromElement } from './dom';


describe('getKeyValueOfAttributesFromElement', () => {
    let mockData;

    beforeEach(() => {
        mockData = {
            attributes: {
                a: 'somestring',
                b: 42,
                c: false
            }
        };
    });

    it('should work', () => {

        const myFunc = getKeyValueOfAttributesFromElement(mockData);

        expect(myFunc).toHaveBeenCalled();
    });
});

而不是這種傳遞,我在我的瀏覽器中得到以下錯誤, expected a Spy, but got ({ undefined: undefined }).)

如果我用new關鍵字調用 function 我得到Only a void function can be called with the 'new' keyword.

我在這里想念什么? 如何在我的測試中調用我的 function 而無需編造一個?

好吧, getKeyValueOfAttributesFromElement不是間諜,這就是 Jasmine 所說的。 toHaveBeenCalled方法只能應用於 Jasmine spy object。 myFunc是執行的結果,但不是間諜。

您必須首先存根您的getKeyValueOfAttributesFromElement function,但事實證明創建獨立導出的 function 的間諜非常棘手(請參閱 ZBF215181B51405221347B3D4F6 討論)。

我建議根本不要檢查toHaveBeenCalled ,因為它沒有任何意義。 您通常在依賴項上使用toHaveBeenCalled來單獨測試您的 function,而不是在您剛剛調用的原始 function 上。 只需針對不同的數據集測試結果,在這種情況下這將是 100% 正確的方法。

Jasmine 錯誤可能具有欺騙性。 顯然問題出在.toHaveBeenCalled()方法上。

當我更新我的模擬並使用.toEqual().not.toBeNull()時,它通過了。

describe('getKeyValueOfAttributesFromElement', () => {
let mockData;
it('should return null', () => {
    mockData = {
        attributes: {
            a: {
                nodename: 'something',
                value: 'a value'
            }
        }
    };

    expect(getKeyValueOfAttributesFromElement(mockData)).not.toBeNull();

});

it('should return attributes', () => {
    mockData = {
        attributes: {
            a: {
                nodename: 'something',
                value: 'a value'
            }
        }
    };
    expect(getKeyValueOfAttributesFromElement(mockData)).toEqual({'undefined': 'a value'});

});

it('should return invalid output', () => {
    mockData = {
        attributes: {
            a: {
                nodename: 'something',
                value: 'a value'
            },
            b: {
                name: false,
                value: ''
            }
        }
    };

    expect(getKeyValueOfAttributesFromElement(mockData)).toEqual({'undefined': ''});


});
});

暫無
暫無

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

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