如何模拟DOJO中特定网址的dojo.data.ItemFileReadStore?

时间:2015-04-14 07:39:09

标签: javascript unit-testing dojo qunit

我正在寻找一种方法来模拟dojo.data.ItemFileReadStore,它通过提供的url检索json。

我想在不运行应用程序服务器的情况下编写Dojo代码的单元测试,因此D.O.H.据我所知,框架在这里并不合适。

我只是想从其他js文件干扰dojo初始化流程,以便为dojo.data放置模拟。

有人可以提出一些建议或更好的方法来进行自动化测试来覆盖道场代码吗?

最后,我找到了一种方法: 在您想要干扰的js文件中,我添加了以下内容:

require(['dojo/data/ItemFileReadStore'], function (item) {
    dojo.data = {
        ItemFileReadStore: function (options) {
            return { your implementation here ... };
        }
    };
});

非常感谢更好的决定!

1 个答案:

答案 0 :(得分:4)

Dojo提供dojo/request/registry模块作为注册提供程序的方法,以根据URL等标准处理请求。这对于模拟端点非常有用,尤其是在进行自动化测试时。例如,如果我想嘲笑网址' / foo'所以我可以在对此端点发出请求时随时返回静态数据,我可以执行以下操作:

require([
    'dojo/request/registry',
    'dojo/Deferred'
], function (request, Deferred) {
    request.register('/foo', function () {
        var deferred = new Deferred();

        deferred.resolve({
            identifier: "name",
            items: [
                { name: "Bob"},
                { name: "Sally"},
                { name: "Nancy"}
            ]
        });

        return deferred.promise;
    });
});

每次向我们定义的URL发出请求时,在这种情况下' / foo',它将由此函数提供服务,而不是实际启动XHR请求。此时,我可以创建一个ItemFileReadStore并将其url参数设置为' / foo'它总是会收到上面注册表处理函数指定的数据。

还有一件事:如果您要编写单元测试或功能测试,则应该查看Intern。它是D.O.H的继任者。并且在编写单元测试或功能测试时允许更大的灵活性。