Jasmine在同一测试运行两次时失败
Jasmine fails when same test is run twice
我遇到这样的情况,代码正在工作,但当我运行同一个测试两次时,它失败了,我不知道为什么。在beforeEach()中似乎有一个我不知道的gotcha;
之前两个,每个都运行。一个在顶部的第一个"描述"中,另一个在前面的"描述"内。
有人知道这里出了什么问题吗?
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);
});
});
以下是正在进行的工作(在浏览器上有效,但在测试中失败)。
TIA。
根据您提供的要点以及您对以各种方式操作测试时测试行为的评论,问题最可能的原因是您使用了两次相同的id
。
这是来自beforeEach
块的一行:
container = $('<div id="container" />');
创建一个div
,id
等于"container"。现在问题就在这里:
$('body').append(container).append(sourceElement).append(destinationElement);
container = $('#container');
第一次测试后,一切都很好,因为身体里只有一个"容器"。但是,当您运行第二个测试,并因此再次运行beforeEach
块时,另一个"容器"被附加到主体。现在有两个div
元素带有id
"容器",查询选择器的行为是未定义的。
一个好的解决方案是添加一个afterEach
块,在测试后在其中进行清理——在本例中是删除容器。
afterEach(function () {
$('#container').remove();
});
相关文章:
- Meteor Router数据函数被调用两次
- 从MySQL数据库中获取输入数据需要两次页面刷新
- Module.start()已激发两次
- Jquery点击事件必须点击两次
- Append元素在运行两次函数后不显示
- 防止双击执行两次jQuery post请求
- 我必须点击两次才能激活任何按钮操作(离子/角度)
- 单击jQuery会激发两次
- 如何避免在树上走两次
- button.单击两次删除附加操作后不工作
- 由于$compile,Javascript(Angular)嵌套指令加载了两次
- PHP和JS脚本的奇怪问题,在我刷新页面之前第一次失败
- 单击元素两次后执行操作
- AngularJs正在阻止链接被点击两次
- 为什么我的路线处理程序会触发两次
- 当我的单元测试失败时,回调被调用了两次
- clear().sendKeys() 两次在量角器中失败
- Jasmine在同一测试运行两次时失败
- 对同一元素调用Mustache两次失败
- 帆JS两个查询第二次失败先删除