2016-06-27 1 views
0

Ember cli mirage를 사용하여 Ember 앱에 대한 수용 테스트를 작성하고 있습니다. 로그인을 위해 서버 응답을 모의하는 데 성공했지만 어떻게 수행했는지 행복하지 않습니다. Ember cli mirage는 경로 처리기에 대한 약자를 사용하며이를 사용하고 싶습니다. 그러나 내가 시도한 모든 것은 나에게 오류를 던졌습니다 (이 해결책 제외). 누군가가이 응답을 리팩토링하도록 도울 수 있습니까?ember cli mirage의 모방 응답 리팩토링 0.2.x

this.post('/login', ({ users, resources })=> { 
    let user = users.first(); 

    if(!Ember.isEmpty(resources.first())){ 
    return { 
     data: { 
     type: 'user', 
     id: user.id, 
     attributes: user, 
     relationships: { 
      resources: { 
      data: [ 
       { id: resources.first().id, type: 'resource' } 
      ] 
      } 
     } 
     }, 
    }; 
    } else { 
    return { 
     data: { 
     type: 'user', 
     id: user.id, 
     attributes: user 
     } 
    }; 
    } 
}); 

사용자 및 자원 모델에서 관계가있는 사용자 및 자원 모델과 팩토리가 모두 정의되어 있습니다 (많은 관계가 많음). 테스트에서 사용자를 생성하는 방법은 다음과 같습니다.

+1

당신은 방금 사용자를 돌려 줄 수 있고 미라지는 자동으로 시리얼 라이저 레이어를 통과 할 것입니다 :'return user;'첫 번째 부분은 Mirage의 m2m 관계 이야기가 조금 부족합니다. 지금 당장은 가장 직접적인 방법입니다. –

+0

@KoriJohnRoys 감사합니다. –

답변

1

다 대다 인 경우 직접 m2m 관계 지원이 존재하지 않으므로 명시 적으로 조인 레코드를 만들어야합니다.

// mirage/models/user.js 
import { Model, hasMany } from 'ember-cli-mirage'; 

export default Model.extend({ 

    userResources: hasMany() 

}); 

// mirage/models/resource.js 
import { Model, hasMany } from 'ember-cli-mirage'; 

export default Model.extend({ 

    userResources: hasMany() 

}); 

// mirage/models/user-resource.js 
import { Model, belongsTo } from 'ember-cli-mirage'; 

export default Model.extend({ 

    user: belongsTo(), 
    resource: belongsTo() 

}); 

test('User can login', function(assert){ 
    let user = server.create('user'); 
    let resources = server.createList('resource', 2), 

    // create the join records 
    resources.forEach(resource => { 
    server.create('user-resource', { user, resource }); 
    }); 

    loginUser(user.email); 

    andThen(() => { 
    assert.ok(find('a:contains("Logout")')); 
    assert.equal('resource.content', currentPath()); 
    }); 
}); 

m2m을 직접 노출하는 엔드 포인트를 조롱해야한다면 더 많은 작업이 필요합니다. 그러나 일반적으로 Ember 앱이 CRUD 작업을 관계에 노출 시키면 참여 기록도 노출되는 것이 좋습니다. 일을 더 단순하게 만듭니다.

말하자면, Mirage는 결국 m2m 관계를 지원합니다.

+0

명확한 설명 주셔서 감사합니다. –