javascript - Jasmine 期望在backbone.view 上调用 spy 功能

标签 javascript jasmine jasmine-jquery gulp-jasmine

我在 Jasmine 测试中无法理解 spy 。

当我运行以下测试时,我可以在控制台中看到输出CLOSE EVENT,但测试触发关闭失败。

如何使用 spy 正确编写测试?

define([
    'backbone'
], function(Backbone){
    describe('TEST', function(){
        beforeEach(function(){
            this.view = new (Backbone.View.extend({
                initialize: function(){
                    _(this).bindAll('close');
                    this.$el.append($('<span>', {class: 'closeview'}));
                    $('body').append(this.$el);
                    this.$el.on('click', '.closeview', this.close);
                },
                close: function(){
                    console.log('CLOSE EVENT');
                }
            }));
        });
        it('exists', function(){
            expect(this.view.$el).toBeVisible();
        });
        it('triggers close', function(){
            spyOn(this.view, 'close');
            this.view.$el.find('.closeview').trigger('click');
            expect(this.view.close).toHaveBeenCalled();
        });
    });
});

最佳答案

当你监视一个函数时,你实际上是在 stub 该方法。如果只是想检查函数是否被调用但重要的是内容是否被执行,则需要添加:

and.callThrough()

尝试将您的示例修改为:

spyOn(this.view, 'close').and.callThrough();

看看这是否可以帮助您解决问题:)

关于javascript - Jasmine 期望在backbone.view 上调用 spy 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39415101/

相关文章:

javascript - 使用框中的箭头增加文本框中的值

javascript - Kendo UI 数据源sync() 将不起作用

javascript - 检查 Jasmine 中的对象相等性

javascript - 使用 karma-jasmine 测试规范内的对象属性更改

javascript - Jasmine:使用可变 URL stub ajax 请求

javascript - 如果未单击单选按钮,如何阻止表单提交

javascript - 具有 2 个数组的对象

AngularJS Jasmine 测试 get-request

javascript - Jasmine 测试甚至在 .click() 被触发之前运行

jquery - Mocha 兼容装置支持