typescript - 你如何在 Jasmine 中测试一个 Typescript 函数?
问题描述
这是一个直截了当的问题,但我找不到答案。Jasmine 文档可以改进。它主要显示了监视模拟数据和函数的示例,但我想测试我编写的函数。否则,我实际上在测试什么?当我使用 Pipes 时,我发现它更加直接,因为我所要做的就是使用 new 关键字实例化管道。然后断言它返回我所期望的。例如
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
如果我用关键字
调用函数,我会得到Only a void function can be called with the 'new' keyword.
我在这里想念什么?我怎样才能在我的测试中调用我的函数而不必编造一个?
解决方案
好吧,getKeyValueOfAttributesFromElement
不是间谍,这就是 Jasmine 所说的。toHaveBeenCalled
方法只能应用于 Jasmine 间谍对象。myFunc
是执行的结果,但不是间谍。
您必须先存根您的getKeyValueOfAttributesFromElement
函数,但事实证明创建一个独立导出函数的间谍非常棘手(请参阅 github 讨论)。
我建议根本不要检查toHaveBeenCalled
,因为它没有任何意义。您通常使用toHaveBeenCalled
依赖项来单独测试您的函数,而不是您刚刚调用的原始函数。只需针对不同的数据集测试结果,在这种情况下这将是 100% 正确的方法。
推荐阅读
- arcgis - 当我使用 CDO 和 ArcGIS 从 netCDF 文件中提取同一网格点的数据时,为什么会得到不同的值?
- docker - 在 Windows 服务器上拉取 docker 映像时连接被拒绝
- c# - 当表单在 Blazor 服务器应用程序中具有有效状态时启用按钮
- weblogic12c - Oracle Service Bus 错误:ClassCastException:无法将 CountingRequestWrapper 强制转换为 ServletRequestImpl
- sql - 将连接查询中的重复值限制为仅显示第一个实例
- windows - 如何在 macOS 和 Windows 之间管理 docker-compose.override.yml 文件?
- nginx-reverse-proxy - 使用 nginx proxy_pass 在浏览器中保留 url 不起作用
- python - Tensorflow:使用 Tensorflow 2.5.0 将 Save_mode.pb 转换为 freeze_graph.pb
- javascript - Vue.js 传递一个返回 true 或 false 作为 prop 的函数
- python - 变形金刚:WordLevel 分词器产生奇怪的词汇