我有一个函数,它返回一个多行字符串,如下所示:
example line 1
example line 2
example line 3
我希望能这样写:
it('should get the proper data', () => {
expect(service.getData('foo').toEqual(
`example line 1
example line 2
example line 3`);
});
但这当然会给予我这个错误,因为测试在大多数行之前添加了一些空格:
Expected 'example line 1
example line 2
example line 3' to equal 'example line 1
example line 2
example line 3'.
现在,我显然知道我可以通过添加\n
字符或手动删除空格来稍微不同地编写测试,但这在我的测试中看起来有点丑陋。
我希望有一种实用程序可以像这样使用:
it('should get the proper data', () => {
expect(service.getData('foo').toEqual(
util.safeUnindent(`example line 1
example line 2
example line 3`));
});
有没有什么插件可以安全可靠地去掉这样的缩进,我只需要自己滚动,还是应该使用\n
字符?
2条答案
按热度按时间3htmauhk1#
看起来你必须自己滚动一点(我还没有找到任何开箱即用的解决方案)。
但是我很快想到了一些事情,我发现定制匹配器是最优雅的。
1.使用
toContain
检查返回的字符串中是否包含预期内容1.使用
toMatch
-使用正则表达式(RegEx)进行检查1.使用自定义匹配器-非常可重用且易于阅读
参见https://jasmine.github.io/api/edge/matchers、https://jasmine.github.io/tutorials/custom_matcher和https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_expressions
要测试的功能:
测试设置:
[ \n]*
匹配零个或多个空格或换行符。gj3fmq9x2#
我回想起我参与的一个老项目,TSLint。我记得他们的测试有一个
dedent
方法,用于测试TypeScript代码的字符串作为其linter的输入/输出。我找到了他们的dedent
方法源代码,下面是一个使用它的JSON代码字符串的示例所以我修改了一下,真的简化了,变成了这个,看起来对我有用。
我可以像这样使用它,这很酷,因为它像函数一样工作,但我不需要左括号或右括号
现在在我的项目的早期阶段,这似乎对我现有的测试工作得很好。这看起来像是一个很好的方式来推进这一点,或者我错过了什么,可能会咬我在未来?