2017-02-21 2 views
0

Pretender을 사용하여 테스트 용 설비를 제공하는 애플리케이션이 있습니다. 이제 ember-cli-mirage으로 이전하려고합니다. 모든 조명기를 한 번에 마이그레이션 할 수는 없습니다. 그래서 기본적으로 우리가 Pretender 서버를 시작하고 ember-cli-mirage가 자체 서버를 시작한다는 것입니다. Whic 렌더링 경고 :기존 앱에 ember-cli-mirage

두 번째 Pretender 인스턴스는 이미 실행 중일 때 만들었습니다. 한 번에 두 개의 Pretender 서버를 실행하면 예기치 않은 결과가 발생하고 향후 주요 버전에서 완전히 제거됩니다. 더 이상 응답 할 필요가 없으면 인스턴스에서 .shutdown()을 호출하십시오.

경고 일 뿐이므로 과도 기간에는 문제가되지 않습니다. 일단 Mirage가 응용 프로그램에로드되면 이전 Pretender 경로가 응답을 멈추는 문제가 있습니다. 나는 그것이 "... 예상치 못한 결과로 이어질 것"이라고 말하고있는 것 같습니다.

수동으로 만든 Pretender 경로와 함께 ember-cli-mirage를 실행할 수 있습니까? 또는 Mirage 서버를 사용하여 해당 경로를 주입 할 수 있습니까?

답변

1

나는 Mirage의 서버를 사용하고 내부에 Pretender 라우트를로드합니다. (Mirage의 서버는 실제로는 new Pretender 인스턴스를 구성하는 객체입니다.) 사람들이 mirage 폴더를 보면 경로가 거기에 정의되어있을 것으로 예상됩니다. 또한 Mirage는 테스트 도중 Pretender 인스턴스를 정리합니다.

mirage/config.js에서 기존의 Pretender 경로를 가져 와서 호출 할 수 있습니다. 미라지 요구자 위에 설탕을 가지고 있지만, 당신은 항상 config 함수 내에서 this.pretender를 통해 기본 요구자 인스턴스에 액세스 할 수 있습니다

// mirage/config.js 
import setupYourOldRoutes from 'somewhere'; 

export default function() { 
    this.get('users'); // new Mirage shorthand 

    setupYourOldRoutes(this.pretender); 
} 

그래서 setupYourOldRoutes이 가장하는 인스턴스를받는 함수가 될 수 후 사용하여 기존의 모든 경로 핸들러를 정의 그것.

+0

감사! 방향을 바로 잡아 줘. –

0

@samselikoff 대답을 바탕으로 내 경우에 대한 해결책을 찾았습니다. 우리는 이미 하나의 중심점을 가지고 있습니다. 그것은 바로 위장 된 인스턴스의 생성을 처리하는 것입니다. 그래서 수정은 새로운 하나를 만드는 대신 미라지의 요구자을 통과 단지였다

// somewhere.js 
export default function() { 
    // initPretender: function() { 
    // this.pretender = new Pretender(); 
    // } 
    initPretender: function (pretender) { 
    this.pretender = pretender; 
    }, 
    getPretender: function() { 
    return this.pretender; 
    } 
} 

// mirage/config.js 
import pretenderWrapper from 'somewhere'; 

export default function() { 
    this.get('users'); // new Mirage shorthand 

    pretenderWrapper.initPretender(this.pretender); 
} 

까다로운 부분은 getPretender()를 호출하려고 우리의 레거시 코드의 전에 initPretender()가 호출되어 있는지 확인하는 것이 었습니다. I 보통라고 생각하면 문제가되지 않습니다. 우리의 경우 우리는 tests/helpers/start-app.js을 패치하여 모든 테스트에서 일부 치구가 주입되도록했습니다. 그리고 이로 인해 getPretender()이 너무 일찍 발생했습니다.

+0

특정 문제를 해결하는 아주 구체적인 솔루션입니다. 누군가 비슷한 문제가있는 경우 여기에 게시하십시오. –