ember-data-factory-guy icon indicating copy to clipboard operation
ember-data-factory-guy copied to clipboard

Test serializers using factories.

Open far-fetched opened this issue 6 years ago • 3 comments

Hello, During serialization / normalization tests I have encountered a problem, which I am not sure is possible to resolve. Ofc I would like to use factories. E.g. I test my serializer, using expected payload from server.

this.store.normalize('model', payload);

Using make / build I can create objects which depend on models - usually fairly distinct from server response payload. Let's suppose I have old system without rest, json-api conventions. My member factory method (build) returns:

{ 
   id: 1,
   name: 'member1',
   group: 1
}

But serializer needs sth like:

{
   member: {
      id: 1
   },
   group: {
      id: 1
   }
}

I was wondering about sth like:

build('member').payload()

and define additional hook in factory e.g.

FactoryGuy.define('member', {
   default: {
      ...
   },
   payload(member) {
      return {
         member: member,
         group: member.group 
      }
   }

WDYT ? Any possible solutions, ideas ?

far-fetched avatar Jan 31 '20 13:01 far-fetched

I am not exactly sure what you need but factory guy has

mockAny({url: "http://blah", responseText: {whatever the heck you want}).

see here the tests for it .. because YIKES ,, it is not documented!

danielspaniel avatar Jan 31 '20 22:01 danielspaniel

Hmm ok sounds reasonable. If you mentioned mock* functions... Is it any simple way of testing pending states using mock* helpers ?

Pseudo test idea:

let request = mockFindAll('comment'); // don't specify what endpoint returns 
let response = commentService.findAllWithSpinner(); //adapter 'findAll' returns pending promise

// here test spinner is visible

request.resolve(comments);
await response;

// here test spinner is hidden

assert.ok(response.value);

far-fetched avatar Feb 06 '20 14:02 far-fetched

I don't know man .. if you can make a PR for this that is clean .. i would take it .. but not so easy.

danielspaniel avatar Feb 06 '20 20:02 danielspaniel