gpt4 book ai didi

javascript - Squire 正在打破其他测试

转载 作者:数据小太阳 更新时间:2023-10-29 04:12:50 24 4
gpt4 key购买 nike

我正在使用 Karma、Jasmine、Jasmine.Async、Sinon 和 Chai。

好消息...这个测试工作正常。依赖关系被 mock , spy 被调用,故意破坏测试对象导致测试失败。

define(['chai', 'squire'], function (chai, Squire) {

var should = chai.should(),
async = new AsyncSpec(this),
subject, injector = new Squire();

describe('EventsView', function () {

describe('when an event is clicked', function () {
var mockModel, stub;

async.beforeEach(function (done) {
setFixtures('<div id="screen"></div>');

mockModel = {
toJSON: function () {
return {
dimensions: "hu1 vu2",
events: [{
date: "8/29/2013",
id: "8923",
title: "Fancy Show",
venue: "Lovely venue",
}, {
date: "8/29/2013",
id: "9034",
title: "Exciting Game",
venue: "Lovely stadium"
}],
id: 3566,
kind: "events",
title: "Top events this week"
};
},
fetch: function () {}
};
stub = sinon.stub();
injector.mock('tiles/events-tile/events-detail-model', Squire.Helpers.constructs({
fetch: stub
}));
injector.require(["tiles/events-tile/events-view"], function (ev) {
subject = new ev(mockModel);
done();
});
});

async.afterEach(function (done) {
injector.clean();
injector.remove();
done();
});


async.it('should attempt to fetch the event details', function (done) {
$('#screen').html(subject.$el);
$('.event').first().click();
stub.called.should.be.true;
done();
});
});
});
});

坏消息......以前正常的其他测试的负载现在由于奇怪的原因而失败。例如:错误:Backbone.history 已经启动TypeError: 'undefined' 不是一个对象(评估 'Backbone.Validation.mixin')

如果我注释掉代码片段

injector.require(["tiles/events-tile/events-view"], function (ev) {
subject = new ev(mockModel);
done();
});

然后其他测试再次工作。我以前发生过这样的事情,通常是因为 sinon 模拟没有得到恢复。 injector.clean() 调用似乎没有提供我所希望的 Elixir 。

最佳答案

根据我的经验,Squire 带来的麻烦远远多于它解决的问题。你在使用任何 jQuery 插件吗?我发现它们不能很好地与 squire 配合使用,并可能导致后续测试失败。如果是这样,请查看 this blog关于如何处理。

不过,我的建议是完全放弃 Squire。使用 sinon 并创建您自己的实用程序来准确地模拟您需要的东西,不仅可以使您的异步测试再次同步(被测代码是同步的),而且还可以鼓励创建更多可测试的代码。它还应该可以帮助您更深入地了解您的代码和库 - stub Backbone.history 以执行路由操作而不实际触发路由是一个很好的练习,也是添加到您的测试库的一个很棒的实用程序。

关于javascript - Squire 正在打破其他测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18811369/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com