5

首先,我是测试驱动开发 (TDD) 和行为驱动开发 (BDD) 的新手,我很难相信这是开发网页的好方法,因为页面通常需要在快速的方式,如果您必须先开发测试代码才能做任何事情,这很难。

无论如何!

我写这个线程的原因不是因为,我发现是,问题(但如果你有输入,我也会喜欢阅读它!)。我一直在阅读一些关于语法、它是如何工作的以及所有这些的。我发现,如果我的函数不返回值,这种方法很难实现。

例如,假设我有一个点击事件触发函数,它仅更改输入的文本值:

$('input[type="text"]').click(function() {
    $(this).val('Oh, that tickles!');
});

茉莉花是如何处理这个问题的?像下面的代码?:

describe('Input type text is clicked', function () {  
    it('changes text in the input field', function () {  
        expect($('input[type="text"]').val()).toEqual("Oh, that tickles!");  
    });  
});

这虽然是错误的,因为 jQuery 对象可以包含多个不包含该值的输入字段。有没有办法找到元素(例如$(this)或类似的),或者我应该在茉莉花测试中放置一个点击处理程序?像这样:

describe('Input type text is clicked', function () {  
    it('changes text in the input field', function () {
        $('input[type="text"]').click(function() {
            expect($(this).val()).toEqual("Oh, that tickles!");
        }  
    });  
});

一些清晰会很好:)

提前非常感谢!

/J。

4

1 回答 1

3

一种方法是确保在运行测试时只有一个文本输入字段。您可以使用jasmine-jquery创建带有输入字段的夹具:

describe('Input type text is clicked', function () {  
  beforeEach(function() {
    jasmine.getFixtures().set('<input type="text" />');
    bindClickEvent();
  });
  it('changes text in the input field', function () {
    $('input[type="text"]').click();
    expect($('input[type="text"]').val()).toEqual("Oh, that tickles!");  
  });  
});

您可能想要重构您的代码,以便您可以测试单击事件是否由单击处理程序本身单独处理:

var eventHandlers = {
  tickle: function() {
    $(this).val('Oh, that tickles!');
  }
};    
$('input[type="text"]').click(eventHandlers.tickle);

然后你会有两个测试:

describe('Input type text is clicked', function () {  
  beforeEach(function() {
    jasmine.getFixtures().set('<input type="text" />');
    spyOn(eventHandlers, 'tickle');
    bindClickEvent();
  });
  it('should tickle the field', function () {
    $('input[type="text"]').click();
    expect(eventHandler.tickle).toHaveBeenCalled();
  });  
});

describe('eventHandlers.tickle', function () {  
  it('should set the field value', function () {
    var input = $('<input type="text"/>');
    eventHandlers.tickle.call(input);
    expect(input.val()).toBe("Oh, that tickles!");
  });  
});
于 2013-09-05T16:15:07.200 回答