繁体   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