2017-05-09 5 views
4

Ich laufe gerade durch das offizielle EmberJS Tutorial auf ihrer Webseite und bin auf this part. Alles funktioniert perfekt in der App selbst, wenn ich ember serve ausführen, aber das Problem ist, wenn ich die Komponententests für den neuen Dienst ausführen. Ich betreibe ember test --server und ich erhalte eine Fehlermeldung, dass ich einen Screenshot von unten nahm:Ember JS tutorial: TypeError: Kann 'Eigenschaft' von undefined nicht lesen

enter image description here

Die Einheit Testcode:

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'); 
}); 

aus dem Tutorial, mein Verständnis ist, dass this.subject({ cachedMaps: stubCachedMaps }) wird eingerichtet all die maps für mich, aber es scheint, dass der Dienst selbst undefiniert sein könnte, was zu keiner Eigenschaft führt maps. Ist das richtig? Was könnte das verursachen?

System-Spezifikationen vom Laufen ember --version:

  • glut-cli: 2.13.0
  • Knoten: 6.8.1
  • os: Darwin x64
+0

ja, sehr ähnlich. Ich dachte, ich wäre verrückt, also habe ich angefangen, ihren Code einzufügen. Das ist kaputt. Ich werde warten, um zu sehen, ob jemand hier antwortet – codyc4321

Antwort

3

So lief in die gleiche Sache. Es sieht so aus, als ob zwischen jedem Test der vorherige Stub gelöscht wurde. also habe ich es im zweiten test nochmal hinzugefügt und es hat super geklappt:

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

genial! Danke :) Ich fühle mich albern nicht zu sehen – Sticky

1

Der Testcode Sie auf dem Laufenden sollte arbeiten, also muss das Problem anderswo sein.

Können Sie den Rest des Codes mit der abgeschlossenen Version der Tutorial-App vergleichen? Sie können den Repo @https://github.com/ember-learn/super-rentals

klonen Alle Tests laufen gut, einschließlich der Karten-Service.

+0

Ich habe ein diff, aber nicht sicher, was ich von den Ergebnissen machen soll. Hier ist der Link zu der diff.txt, die ich gemacht habe: https://github.com/Sticksword/ember-super-rentals-tutorial/blob/master/diff.txt Alternativ kann ich einfach meinen Repo klonen und dann 'git diff 'auf dem offiziellen ember repo als separate' remote'. – Sticky

1

ich laufe das auch gleich an. Die Lösung von @cythrawll funktioniert, aber es ist nicht die Ursache von TypeError: Cannot read property 'maps' of undefined Fehler.

In Tutorial vergessen sie

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

in test/index.html Datei hinzuzufügen. Issue ist bereits gemeldet.

+1

Noch die Utility-Klasse sollte verspottet werden wie @cythrawll tat – lsborg

Verwandte Themen