2017-05-09 43 views
4

我目前正在通過其官方EmberJS教程在其網站上運行,我在this part上。當我運行ember serve時,一切都在應用程序本身完美運行,但問題在於當我運行新服務的單元測試時。我運行ember test --server,我得到的是我把下面的截圖錯誤:Ember JS教程:TypeError:無法讀取未定義的屬性「地圖」

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.txt的鏈接:https://github.com/Sticksword/ember-super-rentals-tutorial/blob/master/diff.txt 或者,可以將我的repo複製,然後執行'git diff '作爲一個單獨的'遙控器'在官方的餘燼回購上。 – 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

相關問題