Protractor: Angular 2 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— λͺ¨μ˜ λͺ¨λ“ˆ μΆ”κ°€ 지원

에 λ§Œλ“  2016λ…„ 04μ›” 06일  Β·  31μ½”λ©˜νŠΈ  Β·  좜처: angular/protractor

ν˜„μž¬ Angular 2 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— λͺ¨μ˜ λͺ¨λ“ˆμ„ μΆ”κ°€ν•˜λŠ” 것은 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.

이 λ¬Έμ œλŠ” μ—¬κΈ° 에 κ²Œμ‹œλœ TODOλ₯Ό λ°˜μ˜ν•©λ‹ˆλ‹€.

그리고 κ΄€λ ¨ SO κ²Œμ‹œλ¬Όμ„ μƒν˜Έ μ°Έμ‘°ν•˜λ €λ©΄ http://stackoverflow.com/questions/36354233/protractor-mocking-backend-with-angular2-on-api-requestλ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

κ°μ‚¬ν•©λ‹ˆλ‹€.

user experience feature request

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

@jlin412 λ„€, κ²°κ΅­μ—λŠ” 쑰사가 ν•„μš”ν•˜μ§€λ§Œ aot와 non-aot λͺ¨λ‘μ—μ„œ μ–΄λ–»κ²Œ μž‘λ™ν•˜λŠ”μ§€ μ‘°μ‚¬ν•˜κ³  μ‹ μ€‘ν•˜κ²Œ 생각해야 ν•©λ‹ˆλ‹€. ν•˜μ΄λΈŒλ¦¬λ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 경우 ng1 λΉ„νŠΈμ— λŒ€ν•΄ 계속 μž‘λ™ν•©λ‹ˆλ‹€.

λ‹€λ₯Έ λͺ¨λ“  μ‚¬μš©μž - +1 λ¬Έμ œμ— λŒ€ν•΄ github의 이λͺ¨ν‹°μ½˜ 응닡을 μ‚¬μš©ν•˜μ„Έμš”. 주석을 μΆ”κ°€ν•˜λ©΄ μ‹€μ œ 진행 상황을 ꡬ문 λΆ„μ„ν•˜κΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€. 읽을 수 μžˆλ„λ‘ μ΄λŸ¬ν•œ 주석을 μ œκ±°ν•˜κ² μŠ΅λ‹ˆλ‹€. 감사 ν•΄μš”!

λͺ¨λ“  31 λŒ“κΈ€

@juliemr Angular 2에 λŒ€ν•΄ mock을 지원할 κ³„νšμž…λ‹ˆκΉŒ? κ·Έλ ‡λ‹€λ©΄ μ–Έμ œ? ν•˜μ΄λΈŒλ¦¬λ“œ λͺ¨λ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ κ·Έ λ™μ•ˆμ—λ„ mock이 계속 μž‘λ™ν•©λ‹ˆκΉŒ?

@jlin412 λ„€, κ²°κ΅­μ—λŠ” 쑰사가 ν•„μš”ν•˜μ§€λ§Œ aot와 non-aot λͺ¨λ‘μ—μ„œ μ–΄λ–»κ²Œ μž‘λ™ν•˜λŠ”μ§€ μ‘°μ‚¬ν•˜κ³  μ‹ μ€‘ν•˜κ²Œ 생각해야 ν•©λ‹ˆλ‹€. ν•˜μ΄λΈŒλ¦¬λ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 경우 ng1 λΉ„νŠΈμ— λŒ€ν•΄ 계속 μž‘λ™ν•©λ‹ˆλ‹€.

λ‹€λ₯Έ λͺ¨λ“  μ‚¬μš©μž - +1 λ¬Έμ œμ— λŒ€ν•΄ github의 이λͺ¨ν‹°μ½˜ 응닡을 μ‚¬μš©ν•˜μ„Έμš”. 주석을 μΆ”κ°€ν•˜λ©΄ μ‹€μ œ 진행 상황을 ꡬ문 λΆ„μ„ν•˜κΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€. 읽을 수 μžˆλ„λ‘ μ΄λŸ¬ν•œ 주석을 μ œκ±°ν•˜κ² μŠ΅λ‹ˆλ‹€. 감사 ν•΄μš”!

@juliemr Angular 2에 λŒ€ν•œ λͺ¨μ˜ κ΅¬ν˜„μ— λŒ€ν•œ ETAκ°€ μžˆμŠ΅λ‹ˆκΉŒ?
λ˜ν•œ κ·Έ λ™μ•ˆ μ‚¬μš©ν•  수 μžˆλŠ” λŒ€μ•ˆμ΄ μžˆμŠ΅λ‹ˆκΉŒ?

λ°œμ‹ : http://stackoverflow.com/questions/36354233/protractor-mocking-backend-with-angular2-on-api-request.

http-backend-proxy 및 httpbackend νŒ¨ν‚€μ§€λ„ λ§ˆμ°¬κ°€μ§€μž…λ‹ˆλ‹€.

κ·Έλž˜μ„œ docker-composeλ₯Ό μ‚¬μš©ν•˜μ—¬ E2E ν…ŒμŠ€νŠΈ ν™˜κ²½μ„ λ§Œλ“€μ—ˆλŠ”λ°, κ΅¬ν˜„μ΄ κ³Όν•˜λ‹€λŠ” 생각이 λ“­λ‹ˆλ‹€.

ν˜„μž¬ λͺ¨λ²” 사둀가 μžˆμŠ΅λ‹ˆκΉŒ?

λ°±μ—”λ“œ ν˜ΈμΆœμ„ μ‘°λ‘±ν•˜λŠ” 것과 λ™μΌν•œ λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. μ—°κ²° 미듀웨어λ₯Ό μ‚¬μš©ν•˜μ—¬ 앱을 μ‹€ν–‰ν•  λ•Œ 각도 1 및 2 http μš”μ²­μ„ λͺ¨μ˜ν•  수 μžˆλŠ” ν”ŒλŸ¬κ·ΈμΈμ„ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.

https://mdasberg.github.io/ng-apimock/

μ–΄μ©Œλ©΄ 당신은 그것을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 방법은 ν™•μ‹€ν•˜μ§€ μ•Šμ§€λ§Œ λͺ¨μ˜ λͺ¨λ“ˆμ„ μ„€μΉ˜ν•˜λŠ” μˆœμ§„ν•œ μ ‘κ·Ό 방식은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

κ°λ„κΈ°λŠ” μ–΄λ–»κ²Œ λ“  λ‹€μŒ 두 가지 방법을 λͺ¨λ‘ μž¬μ •μ˜ν•©λ‹ˆλ‹€.

  • platformBrowserDynamic().bootstrapModule
  • platformBrowser().bootstrapModuleFactory

κ·Έ μžλ¦¬μ—λŠ” μƒˆλ‘œμš΄ ngModule을 κ΅¬μ„±ν•˜κ³  μš°λ¦¬κ°€ μ‘°λ‘±ν•˜κ³  싢은 λͺ¨λ“ˆμ„ μ œκ³΅ν•˜λŠ” κ°„λ‹¨ν•œ λž˜νΌκ°€ μžˆμ„ κ²ƒμž…λ‹ˆλ‹€(μ•„λž˜λŠ” μ–΄λ–»κ²Œ μƒκ²ΌλŠ”μ§€μ— λŒ€ν•œ μ˜μ‚¬ μ½”λ“œμž…λ‹ˆλ‹€):

function bootstrapModuleOverride (moduleToBootstrap) {
  @NgModule({
    imports: [moduleToBootstrap],
    provide: ArrayOfMockModules,
    bootstrap: moduleToBootstrap.bootstrap
  })
  class moduleToBoostrapWrapper {}

  platformBrowserDynamic().bootstrapModule(moduleToBoostrapWrapper);
}

이 κΈ°λŠ₯에 λŒ€ν•œ κ³„νšλœ λ¦΄λ¦¬μŠ€κ°€ μžˆλŠ”μ§€ μ•Œκ³  μžˆμŠ΅λ‹ˆκΉŒ?

이 κΈ°λŠ₯에 λŒ€ν•΄ +1μž…λ‹ˆλ‹€. Angular 2+ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ e2e ν…ŒμŠ€νŠΈμ—μ„œ λͺ¨μ˜κ°€ ν•„μš”ν•©λ‹ˆλ‹€!

Angular 2+κ°€ μ„±μž₯ν•˜κ³  μžˆμ–΄μ„œ 이 κΈ°λŠ₯이 μƒλ‹Ήνžˆ μ‹œκΈ‰ν•΄μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€ :)

예, ν˜„μž¬ μ›Œν¬ν”Œλ‘œμ— μ ˆλŒ€μ μœΌλ‘œ μ€‘μš”ν•©λ‹ˆλ‹€.

μš°λ¦¬λŠ” 이미 angular5에 있고 μ—¬μ „νžˆ e2e μ‚¬μ–‘μ—μ„œ httpλ₯Ό μ‘°λ‘±ν•  수 μ—†μŠ΅λ‹ˆλ‹€ πŸ˜•

( @tauil μž‘μ€ 세상, 응?)

.NET용 addMockModule이 ν•„μš”ν•œ 일반적인 μš©λ„λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

1) λ§žμΆ€ν˜• 인터셉터 μ£Όμž….
https://angular.io/guide/http#writing -an-interceptor
μ˜ˆμ œλŠ” ν…ŒμŠ€νŠΈκ°€ μ‹€νŒ¨ν•  경우 각도기λ₯Ό μ‚¬μš©ν•˜μ—¬ http ν™œλ™μ„ μΊ‘μ²˜ν•˜κ³  λ””μŠ€ν¬μ— μ“°κΈ°λ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€.

2) 일반적으둜 μ„œλΉ„μŠ€μ˜ κΈ°λŠ₯을 μž¬μ •μ˜ν•˜μ—¬ 타사 데이터 μ„œλΉ„μŠ€λ₯Ό λͺ¨λ°©ν•©λ‹ˆλ‹€.

      .decorator(
          'xyzService',
          [
            '$q', '$delegate',
            ($q, $delegate) => {
              $delegate.isEnabled = () => true;
              return $delegate;
            }
            $delegate.getProfileDetail = () =>
                  $q.when({name: 'Tester 001', title: 'E2E Tester'});
          ])

맞좀 μ„œλΉ„μŠ€μ˜ 경우: httpclient ν…œν”Œλ¦Ώ μ ‘κ·Ό 방식을 λ”°λ₯Ό 수 μžˆμŠ΅λ‹ˆλ‹€. (1)을 κ΅¬ν˜„ν•˜λ©΄ 잠재적으둜 이 λ¬Έμ œλ„ ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

3) κ°œλ³„ νŽ˜μ΄μ§€ 개체 내뢀에 λŒ€ν•œ μ•‘μ„ΈμŠ€(μ •κ²°ν•œ 것은 μ•„λ‹˜)
ng.probe($0)._debugInfo
각도기 μ‹€ν–‰ 슀크립트

μ–Έμ œ μ‹œν–‰λ˜λ‚˜μš”?

정말 μ΄κ²ƒμœΌλ‘œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€!

이건 κΌ­ μžˆμ–΄μ•Ό ν•  κΈ°λŠ₯인데 μ–΄λ–»κ²Œ 2년이 λœκ±°μ•Ό?!

이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ jswiremock을 μ‚¬μš©ν•˜μ—¬ λ°±μ—”λ“œ ν˜ΈμΆœμ„ μ œκ±°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 여기에 λͺ‡ 가지 지침을 μž‘μ„±ν–ˆμŠ΅λ‹ˆλ‹€. https://gist.github.com/jamescookie/f7b854226ca1e133d1b7b2798095b7f4

또 λ‹€λ₯Έ λŒ€μ•ˆμ€ 노크 μž…λ‹ˆλ‹€.
μ–΄λ–€ ν”„λ ˆμž„μ›Œν¬μ—λ„ μ˜μ‘΄ν•˜μ§€ μ•Šκ³  HTTP μš”μ²­μ„ μ‘°λ‘±ν•˜κΈ° μœ„ν•œ λ²”μš© λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€.

각도기 μ‚¬μ΄νŠΈ 에 이미 μžˆλŠ” ng-apimock 을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ—¬κΈ° 에 λŒ€ν•œ ν›Œλ₯­ν•œ λΈ”λ‘œκ·Έ κ²Œμ‹œλ¬Όμ΄ μžˆμŠ΅λ‹ˆλ‹€.

AngularJ 및 Angular 앱에 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이 κΈ°λŠ₯은 ng-apimock이 κ°λ„κΈ°μ˜ 핡심 λΌμ΄λΈŒλŸ¬λ¦¬μ— 방금 ν¬ν•¨λœ κ²½μš°μ—λ„ 핡심 κ°λ„κΈ°μ˜ 일뢀여야 ν•œλ‹€κ³  μƒκ°ν•˜κΈ°μ— μΆ©λΆ„νžˆ μ€‘μš”ν•©λ‹ˆλ‹€.

μ΅œλŒ€ν•œ 엄지손가락을 μΉ˜μΌœμ„Έμš°λ €κ³  ν•˜λŠ”λ° 이 κΈ°λŠ₯의 진행 상황은 μ–΄λ–»μŠ΅λ‹ˆκΉŒ? ν˜„μž¬λ‘œμ„œλŠ” κ°•λ ₯ν•œ μ°¨λ‹¨κΈ°μž…λ‹ˆλ‹€.

μ§„μ§€ν•˜κ²Œ, 각도기가 Angularλ₯Ό μœ„ν•΄ λ²„λ €μ‘ŒμŠ΅λ‹ˆκΉŒ?

λ”°λΌμ„œ 이것은 μ˜€λŠ˜λ‚  각도기 λ˜λŠ” 각도λ₯Ό λ³€κ²½ν•˜μ§€ μ•Šκ³ λ„ λΆ€λΆ„μ μœΌλ‘œ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€λ₯Έ λͺ¨λ“ˆ μ„ΈνŠΈλ₯Ό μ œκ³΅ν•  ng serve 에 λŒ€ν•œ "λͺ¨μ˜" ꡬ성을 생성할 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ 쒅속 μ„œλ²„λ₯Ό μ‹€ν–‰ν•˜μ§€ μ•Šκ³ λ„ λ°±μ—”λ“œ ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•  수 있고 HTTP κ³„μΈ΅μ—μ„œ 쑰둱을 κ΅¬ν˜„ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€. https://github.com/westonpace/angular-example-mock-services μ—μ„œ 이것을 λ³΄μ—¬μ£ΌλŠ” 예제 μ €μž₯μ†Œλ₯Ό λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ μ—¬κΈ°μ—μ„œ SO μ§ˆλ¬Έμ— λŒ€ν•œ 닡변에 ν•„μš”ν•œ 단계λ₯Ό κ°„λž΅ν•˜κ²Œ μ„€λͺ…ν•©λ‹ˆλ‹€. https://stackoverflow.com/questions/39942118/how-to-inject-different-service-based-on-certain-build-environment-in-angular2 /51772549#51772549

Angular 1μ—μ„œμ²˜λŸΌ 쉽고/μ‚¬μš©μž μ •μ˜ν•  수 μ—†μ§€λ§Œ(예: λ‹€λ₯Έ ν…ŒμŠ€νŠΈμ— λŒ€ν•΄ λ‹€λ₯Έ λͺ¨μ˜ μ„œλΉ„μŠ€λ₯Ό μΆ”κ°€ν•  수 μ—†μŒ) μŠ€μΊν΄λ”©μ΄ μ‹€ν–‰λ˜κ³  λ‚˜λ©΄ λͺ¨μ˜ μ„œλΉ„μŠ€ μΆ”κ°€ 및 μ œκ±°κ°€ 맀우 간단해야 ν•©λ‹ˆλ‹€.

μ—¬κΈ°μ—μ„œ 이것을 μ²˜λ¦¬ν•˜λŠ” λΉ λ₯΄κ³  κΉ¨λ—ν•œ 라이브러리 μ—†λŠ” λ°©λ²•μ˜ μš”μ•½:

https://stackoverflow.com/questions/36354233/protractor-mocking-backend-with-angular2-on-api-request/51834607#51834607

이에 λŒ€ν•œ μ—…λ°μ΄νŠΈκ°€ μžˆμŠ΅λ‹ˆκΉŒ? @jlin412 쑰사와 μ‹ μ€‘ν•œ 생각이 ν•„μš”ν•˜λ‹€κ³  ν•˜μ…¨λŠ”λ° μ‹œμž‘ν•˜μ…¨λ‚˜μš”?

이에 λŒ€ν•œ μ—…λ°μ΄νŠΈκ°€ μžˆμŠ΅λ‹ˆκΉŒ? @jlin412 쑰사와 μ‹ μ€‘ν•œ 생각이 ν•„μš”ν•˜λ‹€κ³  ν•˜μ…¨λŠ”λ° μ‹œμž‘ν•˜μ…¨λ‚˜μš”?

@katiesandford , μ—¬κΈ° 에 μžμ„Ένžˆ μ„€λͺ…λœ μ ‘κ·Ό 방식이 이 μ„€μ •μ—μ„œ λŒ€λΆ€λΆ„μ˜ ν…ŒμŠ€νŠΈ 상황을 μˆ˜μš©ν•  것이라고 λ―ΏμŠ΅λ‹ˆλ‹€. 그렇지 μ•Šμ€ 경우 ν–₯ν›„ 상황에 λŒ€ν•΄ 생각할 수 μžˆλ„λ‘ ν•΄λ‹Ή 이상값이 무엇인지 μ•Œκ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

@gabrieldoty 이 μ ‘κ·Ό 방식을 μ‚¬μš©ν•˜λ©΄ μ„œλΉ„μŠ€ μˆ˜μ€€μ—μ„œλŠ” μ‘°λ‘±ν•  수 μžˆμ§€λ§Œ 잘 μ΄ν•΄ν•˜λ©΄ http μˆ˜μ€€μ—μ„œλŠ” μ‘°λ‘±ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
λ˜ν•œ 행동 쀑심 개발 μ ‘κ·Ό λ°©μ‹μ—μ„œλŠ” λͺ¨μ˜ 객체가 동적이기λ₯Ό μ›ν•©λ‹ˆλ‹€. λ‹€λ₯Έ ν…ŒμŠ€νŠΈ λ‹¨κ³„λŠ” λ‹€λ₯Έ λͺ¨μ˜λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€. 이 μ„€μ •μœΌλ‘œ λ‹¬μ„±ν•˜κΈ° μ–΄λ €μš΄ 것 κ°™μŠ΅λ‹ˆλ‹€.

@gaeljw 쒋은 포인트! 동적 λͺ¨μ˜ 객체λ₯Ό μ²˜λ¦¬ν•˜λŠ” λ‹€μ†Œ νˆ¬λ°•ν•œ 방법을 λ³Ό 수 μžˆμ§€λ§Œ μ˜μ‹¬μ˜ 여지 없이 동적 μ†”λ£¨μ…˜μ΄ λ°”λžŒμ§ν•  κ²ƒμž…λ‹ˆλ‹€!

λ‚΄ μ‘μš© ν”„λ‘œκ·Έλž¨μ€ λͺ¨λ“  HTTP μš”μ²­μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ 단일 데이터 μ„œλΉ„μŠ€ 클래슀만 μ‚¬μš©ν•˜λ―€λ‘œ ν•΄λ‹Ή μ„œλΉ„μŠ€λ₯Ό κ΅μ²΄ν•˜λŠ” 것은 μƒλ‹Ήνžˆ μ‰½μŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 그것은 μ§„μ •ν•œ http λͺ¨μ˜λ§ŒνΌ λ³΄νŽΈμ μ΄μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

그런 생각을 ν•΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€!

이것에 λŒ€ν•œ μ†Œμ‹μ΄ μžˆμŠ΅λ‹ˆκΉŒ? 각도기 개발이 더 이상 ν™œλ°œν•˜μ§€ μ•Šμ€ 것 κ°™μŠ΅λ‹ˆλ‹€...

μ–΄λ–€ μ—…λ°μ΄νŠΈ?

μ‘°λ‘± λͺ¨λ“ˆμ€ #4300을 λ‘˜λŸ¬λ³΄λŠ” 데 도움이 λ©λ‹ˆλ‹€.

와, 이 티켓은 이제 거의 4년이 λ˜μ—ˆμŠ΅λ‹ˆλ‹€! μ—…λ°μ΄νŠΈκ°€ μžˆμŠ΅λ‹ˆκΉŒ?

μ†Œμ‹μ΄ μžˆλ‚˜μš”?

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰