我正在努力在单元测试方面做得更好(并希望自学 TDD)。我目前的项目是 Javascript,我是新手。我想知道如何对我的身份验证进行单元测试?我想我可能不得不制作一个模拟服务器来代替我将实际进行身份验证的那个,但我不知道如何去做。
如果测试框架对答案很重要,我一直在尝试使用 JSTestDriver——尽管如果使用其他东西更容易,我愿意学习,因为我还没有大量时间投入到特定框架上.
谢谢你的帮助!
我正在努力在单元测试方面做得更好(并希望自学 TDD)。我目前的项目是 Javascript,我是新手。我想知道如何对我的身份验证进行单元测试?我想我可能不得不制作一个模拟服务器来代替我将实际进行身份验证的那个,但我不知道如何去做。
如果测试框架对答案很重要,我一直在尝试使用 JSTestDriver——尽管如果使用其他东西更容易,我愿意学习,因为我还没有大量时间投入到特定框架上.
谢谢你的帮助!
测试整个系统有点过于宽泛,无法在这里回答,但我可以解决关于使用模拟服务器的部分。
Sinon.JS是一个测试替身库,有一个非常适合模拟响应的假 XHR/服务器。
在来自docs的这个示例中,我们在设置期间初始化假服务器并在拆卸时将其删除。然后我们告诉服务器使用返回什么数据server.respondWith()
。
服务器调用通常由getCommentsFor()
假服务器拦截,并使用我们在测试中提供的数据respondWith()
。通过调用server.respond()
,虚假的服务器调用会立即执行,这意味着我们不必考虑正常的异步操作。
{
setUp: function () {
this.server = sinon.fakeServer.create();
},
tearDown: function () {
this.server.restore();
},
"test should fetch comments from server" : function () {
this.server.respondWith("GET", "/some/article/comments.json",
[200, { "Content-Type": "application/json" },
'[{ "id": 12, "comment": "Hey there" }]']);
var callback = sinon.spy();
myLib.getCommentsFor("/some/article", callback);
this.server.respond();
sinon.assert.calledWith(callback, [{ id: 12, comment: "Hey there" }]));
}
}