实习生测试不在 dojo 中使用配置的注册表 requestProvider

intern test not using configured registry requestProvider in dojo

我正在关注 this article 在 dojo 中模拟响应。

我的模拟机与文章中的模拟机非常相似,不同之处在于:

registry.register(/\/testIntern/, function (url, options) {
  return when({
                value: "Hello World"
            });

据我所知,这应该映射到地址上包含“/testIntern”的任何请求。

我的测试用例很简单:

// similar to example
var testRest= new Rest("/testIntern", true);
            testRest("").then(lang.hitch(this, function (data) {
                assert.deepEqual("Hello World", data.value, "Expected 'Hello World', but got" + data.value);
            }));

真的应该很简单。但是当我 运行 这个测试时,我得到了 404 Not Found。看起来测试中的 REST 调用没有尝试使用模拟服务。为什么?

您的想法通常是正确的,即使用 dojo/request/registry 注册 URL 应该通过您的处理程序通过 dojo/request 传递任何引用 URL 的内容。

不幸的是,dojo/store/JsonRest 使用 dojo/_base/xhr 模块,它直接使用 dojo/request/xhr,而不是 dojo/request。不幸的是,使用 dojo/request/registry(以及 defaultProvider 的任何设置)创建的任何注册都将在 JsonRest 上丢失。

您可能想看看 dstore - 它的 Rest 存储实现与 dojo/store/JsonRest 相同的服务器请求,但它使用 dojo/request 而不是硬编码到特定的提供商。 (无论如何,dojo/request 在浏览器中默认为 dojo/request/xhr,但可以通过 dojoConfig.requestProvider 覆盖。)dstore 包含用于在 dstore 的 API 和 dojo/store API,如果您需要将它与与后者一起操作的小部件一起使用。