我发现为了测试类似 string.match 或 string.replace 的东西,你不需要间谍,而是声明包含你正在匹配或替换的文本并在 beforeEach 中调用函数,然后检查响应等于您所期望的。这是一个简单的例子:
describe('replacement', function(){
var text;
beforeEach(function(){
text = 'Some message with a newline \n or carriage return \r';
text.replace(/(?:\\[rn])+/g, ' ');
text.replace(/\s\s+/g, ' ');
});
it('should replace instances of \n and \r with spaces', function(){
expect(text).toEqual('Some message with a newline or carriage return ');
});
});
这将是成功的。考虑到这种情况,我还将跟进替换以将多个间距减少到单个间距。此外,在这种情况下,这beforeEach
不是必需的,因为您可以在it
语句中并在您的期望之前使用赋值和调用您的函数。如果您翻转它以string.match
阅读更像expect(string.match(/someRegEx/).toBeGreaterThan(0);
.
希望这可以帮助。
-C§
编辑:或者,您可以将您的str.replace(/regex/);
或压缩str.match(/regex/);
到一个被调用的函数中并在spyOn
其中使用并spyOn(class, 'function').and.callthrough();
在您的beforeEach
和使用类似expect(class.function).toHaveBeenCalled();
and var result = class.function(someString);
(而不仅仅是调用该函数)将允许您测试返回值以expect(class.function(someString)).toEqual(modifiedString);
进行替换或expect(class.function(someString)).toBeGreaterThan(0);
为比赛。
如果这提供了更深入的了解,请随时 +1。
谢谢,
C§