2016-04-08 10 views
0

Ich möchte meinen Router testen, die aus Gründen der Einfachheit sieht wie folgt aus:Wie testen Ember.Router

// app.router.js 
import Ember from 'ember'; 
import config from './config/environment'; 

const Router = Ember.Router.extend({ 
    location: config.locationType 
}); 

Router.map(function() { 
    this.route('sessions', function() { 
    this.route('login'); 
    this.route('logout'); 
    }); 
    this.route('profile'); 
}); 

export default Router; 

Ist es möglich, Unit-Test oder? Ich versuchte Abnahmen mit, aber ich war nicht erfolgreich:

import Ember from 'ember'; 
import { test } from 'qunit'; 

import moduleForAcceptance from 'transformed-admin/tests/helpers/module-for-acceptance'; 

import startApp from 'transformed-admin/tests/helpers/start-app'; 

moduleForAcceptance('Acceptance | configuration', { 
    beforeEach: function() { 
    this.application = startApp(); 
    }, 

    afterEach: function() { 
    Ember.run(this.application, 'destroy'); 
    } 
}); 

test('should map routes correctly', function(assert) { 
    visit('/'); 

    const app = this.application; 

    andThen(function() { 
    app.Router.detect("profile"); // false 
    app.Router.detect("Profile"); // false 

    const a = app.Router.extend({}); 
    a.detect("profile"); // false 
    a.detect("Profile"); // false 
    }); 
}); 

Was hier die besten Praktiken sind? Testen Sie überhaupt Router.map()? Oder verlassen Sie sich auf das Testen von konkreten Routen als Garantie, dass die Router.map() korrekt geschrieben ist?

+3

Akzeptanztests, die [currentUrl] (http://emberjs.com/api/classes/Ember.Test.html#method_currentURL) und [currentPath] (http://emberjs.com/api/classes/) überprüfen Ember.Test.html # method_currentPath) sollte mehr als genug sein –

+0

Vielen Dank @Kitler – Pavol

Antwort

0

Nicht ganz sicher, was Sie tun möchten. Sie könnten acceptance tests für jede Route schreiben, wenn Sie sicherstellen möchten, dass sie sichtbar sind:

import { test } from 'qunit'; 
import moduleForAcceptance from 'people/tests/helpers/module-for-acceptance'; 

moduleForAcceptance('Acceptance | login'); 

test('visiting /', function(assert) { 
    visit('/'); 

    andThen(function() { 
    assert.equal(currentURL(), '/index'); 
    assert.equal(currentPath(), 'index'); 
    }); 
}); 

test('visiting /profile', function(assert) { 
    visit('/profile'); 

    andThen(function() { 
    assert.equal(currentURL(), '/profile'); 
    assert.equal(currentPath(), 'profile'); 
    }); 
}); 

Sie könnten auch unit tests for your routes schreiben.

Sie sollten Ember.js Internals nicht testen. Ember.Router is covered by tests. Sie sollten Ihre anwendungsspezifische Logik (z. B. die Handhabung einer bestimmten Aktion in einem Test "Route by Unit") und das Verhalten (z. B. eine bestimmte Route besteht bei einem Abnahmetest) testen.

+0

Mein Ziel war es zu testen: 'Router.map()' -Funktion. – Pavol

+0

@Pavol Ich habe meine Antwort aktualisiert, um klarzustellen, dass Sie Framework-Internals wie 'Router.map()' nicht testen sollten, aber Ihre Implementierung. – jelhan

+0

Danke, @jelhan. Es war mir aus Ihrer Antwort klar, denn meine Frage enthielt bereits diese Tatsache: "oder sind Sie auf das Testen von konkreten Routen angewiesen ...". Jetzt weiß ich, testen eigene Umsetzung ist genug ;-) – Pavol