我有一个为角度控制器编写的 ES 类,我正在尝试使用 angular-mock 编写茉莉花测试。
在构造函数中,我将 $filter 初始化为 this.i18n = $filter('i18n),它基本上是一个本地化过滤器,它接受一个键、值并返回键的本地化值。
我的问题是,由于类的构造函数具有 $filter 并且稍后在类方法中使用。我的单元测试失败了。我如何使用 $filter 进行测试,以使我的测试不会失败。我正在寻找模拟自定义过滤器
这是我得到的例外
TypeError: this.i18n is not a function
at UsersCtrl.$onInit (test-context.js:35081:41)
at Object.<anonymous> (test-context.js:35031:31)
这是 ES6 类
class UsersCtrl {
constructor($filter) {
this.i18n = $filter('i18n');
this.users = [];
}
//Life cycle Hooks: Initialization
$onInit() {
this.users = [
{name: this.i18n('USERS')}
];
}
}
UsersCtrl.$inject = ['$filter'];
angular.module('app', []).controller('UsersCtrl',UsersCtrl);
export default UsersCtrl;
这是我拥有的单元测试
Import UsersCtrl from './users-controller.js';
describe("given a new User Page", () => {
var UserController;
beforeEach(() => {
angular.mock.module('app');
});
describe("when initialising has completed", () => {
beforeEach(() => {
inject(($rootScope, $controller, $filter) => {
const scope = $rootScope.$new();
const filter = $filter
UserController = $controller("UsersCtrl", { $scope: scope, $filter: filter});
});
});
it("then users array for tab content should be empty initially",() => {
const expectedActive = [];
expect(UserController.users).toEqual(expectedActive);
});
});
});
问题是它运行测试但由于无法使用 this.i18n = $filter('i18n) 初始化而失败。我应该如何初始化测试以将 $filter 传递给测试?我可以模拟过滤器吗,因为我真的不想在这里测试过滤器