茉莉部分字符串匹配

时间:2016-10-11 16:44:17

标签: javascript jasmine karma-jasmine

我喜欢jasmine.objectContaining提供的部分对象匹配:

mySpy({
   foo: 'bar',
   bar: 'baz' 
});
expect(mySpy).toHaveBeenCalledWith(jasmine.objectContaining({ foo: 'bar' }));

字符串是否有茉莉花?类似的东西:

mySpy('fooBar', 'barBaz');
expect(mySpy).toHaveBeenCalledWith(jasmine.stringContaining('foo'), jasmine.any(String));

我想查看一个特定的参数而不诉诸于mySpy.calls的断言:

mySpy('fooBar', 'barBaz');
expect(mySpy.calls.argsFor(0)[0]).toContain('foo');

3 个答案:

答案 0 :(得分:3)

在Jasmine中没有任何类似的东西。但是你可以利用在Jasmine中创建自定义匹配器的能力。

这是一个小例子:

您的工厂

ArrayList

您的自定义匹配器的测试用例

angular.module('CustomMatchers', []).factory('AnotherService', function(){
    return{  mySpy: function(a, b){ } }
});

angular.module('CustomMatchers').factory('MyService', function(AnotherService){
    return{ 
        myFunction: function(a, b){
            AnotherService.mySpy(a, b);
        }
    }
});

希望这有帮助!

答案 1 :(得分:0)

从Jasmine 2.2开始,您可以使用jasmine.stringMatching

例如:

mySpy('fooBar', 'barBaz');
expect(mySpy).toHaveBeenCalledWith(jasmine.stringMatching('foo'), jasmine.any(String));

请注意,该参数是要匹配的正则表达式。对于简单的“包含”,直接传递字符串(使用特殊的正则表达式字符转义),但是它可以做的更多:

// Expect first parameter to be a string *starting* with "foo"
expect(mySpy).toHaveBeenCalledWith(jasmine.stringMatching(/^foo/), jasmine.any(String));

答案 2 :(得分:0)

你可以用 toString() 和 match() 函数来做到这一点

    expect(control.errors.pattern.requiredPattern).toString().match('^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\S\./0-9]*$');