2017-05-09 3 views
4

현재 웹 사이트에서 EmberJS 공식 자습서를 실행 중이며 this part입니다. ember serve을 실행할 때 모든 것이 앱 자체에서 완벽하게 작동하지만 문제는 새로운 서비스에 대한 단위 테스트를 실행할 때입니다. 나는 ember test --server를 실행하고 그리고 내가 아래의 스크린 샷했습니다 오류 얻을 :Ember JS 튜토리얼 : TypeError : 정의되지 않은 'maps'속성을 읽을 수 없습니다.

enter image description here

단위 테스트 코드 : 튜토리얼에서

import { moduleFor, test } from 'ember-qunit'; 
import Ember from 'ember'; 

const DUMMY_ELEMENT = {}; 

let MapUtilStub = Ember.Object.extend({ 
    createMap(element, location) { 
    this.assert.ok(element, 'createMap called with element'); 
    this.assert.ok(location, 'createMap called with location'); 
    return DUMMY_ELEMENT; 
    } 
}); 

moduleFor('service:maps', 'Unit | Service | maps', { 
    needs: ['util:google-maps'] 
}); 

test('should create a new map if one isnt cached for location', function (assert) { 
    assert.expect(4); 
    let stubMapUtil = MapUtilStub.create({ assert }); 
    let mapService = this.subject({ mapUtil: stubMapUtil }); 
    let element = mapService.getMapElement('San Francisco'); 
    assert.ok(element, 'element exists'); 
    assert.equal(element.className, 'map', 'element has class name of map'); 
}); 

test('should use existing map if one is cached for location', function (assert) { 
    assert.expect(1); 
    let stubCachedMaps = Ember.Object.create({ 
    sanFrancisco: DUMMY_ELEMENT 
    }); 
    let mapService = this.subject({ cachedMaps: stubCachedMaps }); 
    let element = mapService.getMapElement('San Francisco'); 
    assert.equal(element, DUMMY_ELEMENT, 'element fetched from cache'); 
}); 

, 내 이해입니다 this.subject({ cachedMaps: stubCachedMaps })가 설정됩니다 모든 maps 나를 위해하지만 서비스 자체가 정의되지 않을 수도 있습니다, 아무 속성으로 이어질 maps. 이게 옳은 거니? 무엇이 이것을 일으킬 수 있습니까? ember --version 실행에서

시스템 사양 :

  • 엠버-CLI : 2.13.0
  • 노드 : 6.8.1
  • OS : 다윈 64
+0

예, 그렇습니다. 나는 내가 정신병자라고 생각해서 코드 복사를 시작했다. 이것은 깨졌습니다. 아무도 대답하지 않을 때까지 기다려야합니다 – codyc4321

답변

3

그래서 같은 문제가 발생했습니다. 이전의 스텁이 지워지는 각 테스트 사이에있는 것처럼 보입니다. 그래서 두 번째 테스트에서 다시 추가했는데 큰 효과를 보았습니다.

test('should use existing map if one is cached for location', 
    function(assert) { 
    assert.expect(1); 
    let stubCachedMaps = Ember.Object.create({ 
     sanFrancisco: DUMMY_ELEMENT 
    }); 
    let stubMapUtil = MapUtilStub.create({ assert }); 
    let mapService = this.subject({ mapUtil: stubMapUtil, cachedMaps: stubCachedMaps }); 
    let element = mapService.getMapElement('San Francisco'); 
    assert.equal(element, DUMMY_ELEMENT, 'element fetched from cache'); 
}); 
+1

굉장해! 고마워요. 나는 이걸 보지 않으면 바보가된다. – Sticky

1

당신이 게시 한 테스트 코드해야 문제가 다른 곳에 있어야합니다.

나머지 코드를 완성 된 튜토리얼 버전과 비교할 수 있습니까? 저장소를 복제 할 수 있습니다. @https://github.com/ember-learn/super-rentals

지도 서비스를 포함하여 모든 테스트가 제대로 실행됩니다.

+0

나는 diff를했으나 결과를 어떻게 만들지 확신하지 못했습니다. 다음은 내가 만든 diff.txt에 대한 링크입니다 : https://github.com/Sticksword/ember-super-rentals-tutorial/blob/master/diff.txt 아니면 내 repo를 복제 한 다음'git diff '공식 ember repo에 별도의'원격'으로. – Sticky

1

나는 똑같은 것을 실행합니다. @cythrawll에 의한 해결책이 있지만 TypeError: Cannot read property 'maps' of undefined 오류의 근본 원인이 아닙니다.

는 튜토리얼에서 그들은 test/index.html 파일에

<script src="https://maps.googleapis.com/maps/api/js?v=3.22"></script> 

을 추가하는 것을 잊지. Issue이 이미보고되었습니다.

+1

아직도 유틸리티 클래스는 @cythrawll처럼 조롱 받아야한다. – lsborg