Re: Using Angular $http service as documentLoader

On Thu, Jun 19, 2014 at 1:10 AM, Dave Longley
<dlongley@digitalbazaar.com> wrote:
> On 06/18/2014 05:20 PM, Tomasz Pluskiewicz wrote:
>> Hi
>>
>> I'm trying to use the jsonld with Angular and in tests I want to
>> replace the default documentLoader with $http service so that I can
>> mock the responses.
>>
>> I assumed that because $http already returns a promise it would be
>> enough to simply use a function like
>>
>> jsonld.documentLoader = function (url) {
>>    return $http.get(url);
>> }
>>
>> as replacement for whatever is currently set.
>>
>> Unfortunately it doesn't work. What's would be correct way to do that?
>
> That's because the value that promise resolves to isn't what is required
> by the JSON-LD API spec. It requires that the promise resolve to a
> "RemoteDocument":
>
> http://www.w3.org/TR/json-ld-api/#idl-def-RemoteDocument
>
> I didn't test this, but it should be pretty close to what you want:
>
> jsonld.documentLoader = function(url) {
>   return $http.get(url).then(function(response) {
>     return {
>       contextUrl: null,
>       document: response.data,
>       documentUrl: url
>     }
>   });
> };
>
> Hopefully that works for you.
>

Unfortunately it's not that easy. I'm not very experienced with
JavaScript or Angular. I created a fiddle [1] similar to my failing
code.

As is, XHR fails, because it's a CORS request. If you uncomment the
two lines two weird things happen (or don't happen). First, $http mock
fails saying there aren't any pending requests and none of the
console.log called in callbacks are invoked. Which is weird, because
it means that even the $http promise is never resolved. I tried to
debug it but I get lost somewhere inside jsonld/angular. Also there
isn't any other exception being caught bu Chrome dev tools.

Any ideas? Hasn't someone already done that?

Thanks,
Tom

[1] http://jsfiddle.net/tpluscode/R5acr/12/

>
> -Dave
>
> --
> Dave Longley
> CTO
> Digital Bazaar, Inc.
>

Received on Thursday, 19 June 2014 11:24:46 UTC