如何在Angular / Jasmine中模拟自定义过滤器

Jac*_*kie 3 jasmine angularjs

我创建了一个自定义过滤器。根据这篇文章,我在茉莉花中创建了以下内容...

beforeEach(module("workOrderManagerApp"));
var mockSearchFilter = function(text, tails, fillTailList) {
    return null;
};
beforeEach(function() {
    module(function($provide) {
        $provide.value('searchItems', mockSearchFilter);
    });
});
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,它仍然运行非模拟过滤器。我在这里想念什么?

m59*_*m59 5

您忘记Filter在过滤器名称的末尾添加,所以searchItems应该是searchItemsFilter。这不是直观的,您只需要了解这一点。Angular像服务一样存储过滤器,但是将其添加Filter到您传入的名称的末尾。

您将注入这样的过滤器:

.controller('MyController', [
  'searchItemsFilter', 
  function(searchItems) {

  }
])
Run Code Online (Sandbox Code Playgroud)

因此,您可以使用以下方法来模拟它: $provide.value('searchItemsFilter', mockSearchFilter);