当相同的测试运行两次时,Jasmine失败

时间:2014-10-13 19:11:14

标签: javascript jasmine

我有这种情况,代码正在运行,但是当我运行相同的测试两次时,它失败了,我不知道为什么。看起来在beforeEach();

中有一个我不知道的问题

两个beforeEach运行。顶部的第一个中的一个"描述"以及之前的内容"描述"。

有人知道这里有什么问题吗?

describe("[data-add-selected].click()", function () {
  var option;

  beforeEach(function () {
    initialize();
    option = container.find('.source .option:last');
    option.addClass('selected');
    container.find('[data-add-selected]').click();
  });

  it("this succeeds", function () {
    expect(source.getOptions().length).toEqual(1);
    expect(destination.getOptions().length).toEqual(2);
  });

  it("this FAILS", function () {
    expect(container.find('.source .option').length).toEqual(1);
    expect(container.find('.destination .option').length).toEqual(2);
  });
});

Here正在进行中(可在浏览器上运行但在测试时失败)。

TIA。

1 个答案:

答案 0 :(得分:2)

根据您提供的gist以及您在以各种方式操纵它们时对测试行为的评论,问题最可能的原因是您使用相同的{{1}两次。

以下是id块的一行:

beforeEach

您创建的container = $('<div id="container" />'); div等于“容器”。现在的问题在于:

id

第一次测试后一切都很好,因为身体里只有一个“容器”。但是,当您再次运行第二个测试,并因此再次运行$('body').append(container).append(sourceElement).append(destinationElement); container = $('#container'); 块时,另一个“容器”将附加到正文。现在有2个beforeEach元素和div“容器”,并且查询选择器的行为未定义。

一个好的解决方案是添加一个id块,在测试后进行清理 - 在这种情况下删除容器。

afterEach