angularjs - 测试 Controller 功能中使用的过滤器

标签 angularjs filter karma-mocha

我有以下测试用例:

it('should return id if the post is successful',function(){
       var result = {
               id : "123"
       };
        ctrl.saveCallback(result);
        expect(ctrl.method.id).to.equal("123");
    });

其中 ctrl.saveCallbackresult.id 复制到 ctrl 上的 method.id,然后显示成功横幅。在成功横幅上,我们使用 translate 过滤器在显示消息之前翻译消息。

功能:

.....
ctrl.method.id = result.id;
magicallyShowOnScreen($filter('translate')('MESSAGES.SUCCESS'));
....

magicallyShowOnScreen 是一项服务,它显示我们传递到屏幕上的任何字符串,并且该字符串已被注入(inject)到 beforeEach 中。

有人可以指出正确的方向,告诉我应该如何测试或模拟这个 $filter('translate') 吗?

最佳答案

前言:我不熟悉 Mocha.js 或如何创建 spy ,但是您仍然可以像其他测试框架一样注入(inject)它们或类似的模拟对象。

下面是一个 Jasmine 示例,希望对您有所帮助。

<小时/>

当您引导模块(使用 module/angular.mocks.module)函数时,您应该提供您自己的 $filter 版本> 这应该是一个模拟/ spy ,返回另一个模拟/ spy 。例如

var $filter, filterFn;
beforeEach(module('myModule', function($provide) {
    $filter = jasmine.createSpy('$filter');
    filterFn = jasmine.createSpy('filterFn');
    $filter.and.returnValue(filterFn);

    $provide.value('$filter', $filter);
});

然后,在您的测试中,您可以确保使用正确的参数调用 $filter,例如

expect($filter).toHaveBeenCalledWith('translate');
expect(filterFn).toHaveBeenCalledWith('MESSAGE.SUCCESS');
expect(magicallyShowOnScreen).toHaveBeenCalled(); // assuming this too is a spy

关于angularjs - 测试 Controller 功能中使用的过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30340506/

相关文章:

javascript - CSS动态3D轮播,z轴定位

c++ - Boost::Log - 使用严重性和自定义过滤器属性记录?使用哪个宏?

ubuntu - ettercap 过滤不起作用

javascript - 生产 Node 应用程序找不到 SVG 文件

python - 如何处理 Django REST 框架中字段的 3 级权限

javascript - 每次 Hook 错误前的 Angular 业力幻影

javascript - 当 promise 在断言期间被拒绝时,业力通过测试

html - 下拉菜单在 Windows Chrome 中切断字母

.net - 如何使用 LINQ 查询作为数据源来过滤 BindingSource