2016-10-11 2 views
1

Я люблю частичное соответствие объекта, который 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'); 
+0

Возможный дубликат [Возможно ли использовать Jasmine's toHaveBeenCalledWith с регулярным выражением?] (Https://stackoverflow.com/questions/14841115/is-it-possible-to-use-jasmines-tohavebeencalledwith-matcher- с-регулярного выраж) – jannis

ответ

2

Существует нет ничего такого рода в Жасмин. Но вы можете использовать возможность создания специального шаблона в Jasmine для этого.

Вот небольшой рабочий пример:

Ваши заводы

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); 
     } 
    } 
}); 

Ваш тест с настраиваемой согласовани

describe('Service: MyService', function() { 
    beforeEach(module('CustomMatchers')); 
    describe('service: MyService', function() { 

     beforeEach(inject(function(_MyService_, _AnotherService_) { 
      MyService = _MyService_; 
      AnotherService = _AnotherService_; 

      spyOn(AnotherService, 'mySpy'); 

      jasmine.addMatchers({ 
       toContain: function() { 
        return { 
         compare: function(actual, expected){ 
          var result = { pass: actual.includes(expected) }; 
          if(result.pass) { 
           result.message = "Success: Expected first arguments '" + actual + "' to contain '"+ expected +"'."; 
          } else { 
           result.message = "Failour: Expected first arguments '" + actual + "' to contain '"+ expected +"'."; 
          } 
          return result; 
         } 
        } 
       } 
      }); 

     })); 

     it('expect AnotherService.mySpy toHaveBeenCalled', function() { 
      MyService.myFunction('fooBar', 'barBaz'); 
      //This should pass 
      expect(AnotherService.mySpy.calls.argsFor(0)[0]).toContain('foo'); 

      //This should fail 
      expect(AnotherService.mySpy.calls.argsFor(0)[0]).toContain('helloWorld'); 
     }); 
    }); 
}); 

Надежда это помогает!

Смежные вопросы