2013-07-26 10 views
8

मुझे टोरन बिलुप के TDD guide का उपयोग करके एम्बर के साथ एकीकरण परीक्षण करने में समस्या हो रही है।मार्ग संक्रमण के लिए एम्बर एकीकरण परीक्षण कैसे करें?

मैं कुनिट और प्रेत जेएस के साथ अपने परीक्षण धावक के रूप में कर्म का उपयोग कर रहा हूं।

मुझे यकीन है कि अगर आधे रनरॉप के शुरुआती ज्ञान के बारे में मुझे आधा है। मेरा सवाल 2 भाग है:

1) मैं रन लूप में एक vist() परीक्षण को कैसे लपेटूं?

2) मैं संक्रमण के लिए कैसे परीक्षण कर सकता हूं? इंडेक्स रूट ('/') को 'projects.index' नामक संसाधन मार्ग में संक्रमण करना चाहिए।

module("Projects Integration Test:", { 
    setup: function() { 
    Ember.run(App, App.advanceReadiness); 
    }, 
    teardown: function() { 
    App.reset(); 
    } 
}); 

test('Index Route Page', function(){ 
    expect(1); 
    App.reset();  
     visit("/").then(function(){ 
      ok(exists("*"), "Found HTML"); 
     }); 
}); 

सही दिशा में किसी भी पॉइंटर्स के लिए अग्रिम धन्यवाद।

+0

आप एम्बर का किस संस्करण का उपयोग कर रहे हैं? मैं आरसी 6 में एक महत्वपूर्ण बग का उल्लेख करने में असफल रहा जो कि "/" मार्ग पर जाने पर टूट जाता है https://github.com/emberjs/ember.js/issues/2997 –

+0

आह! मैं आर 6.1 का उपयोग कर रहा हूँ! क्षमा करें, मैं अपने प्रश्न में उल्लेख करना भूल गया। आपकी मदद के लिए बहुत धन्यवाद! – ganicus

उत्तर

7

पर लिखा था मैं तो बस जब आप "/" मार्ग का उपयोग कर ember.js मारा है कि एक साधारण संक्रमण करता है एक उदाहरण के आवेदन को धक्का दिया RC5

https://github.com/toranb/ember-testing-example

सरल "हैलो दुनिया" उदाहरण के इस

1. तरह दिखता है) ते आप संक्रमण

<table> 
{{#each person in controller}} 
<tr> 
    <td class="name">{{person.fullName}}</td> 
    <td><input type="submit" class="delete" value="delete" {{action deletePerson person}} /></td> 
</tr> 
{{/each}} 
</table> 

2.) ember.js आवेदन कोड

App = Ember.Application.create(); 

App.Router.map(function() { 
    this.resource("other", { path: "/" }); 
    this.resource("people", { path: "/people" }); 
}); 

App.OtherRoute = Ember.Route.extend({ 
    redirect: function() { 
     this.transitionTo('people'); 
    } 
}); 

App.PeopleRoute = Ember.Route.extend({ 
    model: function() { 
     return App.Person.find(); 
    } 
}); 

App.Person = Ember.Object.extend({ 
    firstName: '', 
    lastName: '' 
}); 

App.Person.reopenClass({ 
    people: [], 
    find: function() { 
     var self = this; 
     $.getJSON('/api/people', function(response) { 
      response.forEach(function(hash) { 
       var person = App.Person.create(hash); 
       Ember.run(self.people, self.people.pushObject, person); 
      }); 
     }, this); 
     return this.people; 
    } 
}); 

3.) एकीकरण परीक्षण इस

module('integration tests', { 
    setup: function() { 
     App.reset(); 
     App.Person.people = []; 
    }, 
    teardown: function() { 
     $.mockjaxClear(); 
    } 
}); 

test('ajax response with 2 people yields table with 2 rows', function() { 
    var json = [{firstName: "x", lastName: "y"}, {firstName: "h", lastName: "z"}]; 
    stubEndpointForHttpRequest('/api/people', json); 
    visit("/").then(function() { 
     var rows = find("table tr").length; 
     equal(rows, 2, rows); 
    }); 
}); 

4.) की तरह दिखता है के दौरान करने के लिए रीडायरेक्ट mplate एकीकरण सहायक मैं अपने अधिकांश ember.js परियोजनाओं पर उपयोग करता हूं

document.write('<div id="foo"><div id="ember-testing"></div></div>'); 

Ember.testing = true; 

App.rootElement = '#ember-testing'; 
App.setupForTesting(); 
App.injectTestHelpers(); 

function exists(selector) { 
    return !!find(selector).length; 
} 

function stubEndpointForHttpRequest(url, json) { 
    $.mockjax({ 
     url: url, 
     dataType: 'json', 
     responseText: json 
    }); 
} 

$.mockjaxSettings.logging = false; 
$.mockjaxSettings.responseTime = 0; 
4

मैं कर्म के साथ अपरिचित हूँ, लेकिन अपने परीक्षण के कुछ भागों एंबर के साथ बातचीत करने की जरूरत है कि रन पाश में धकेल दिया जाना चाहिए (जैसा कि आप उल्लेख कर रहे थे)

Ember.run.next(function(){ 
    //do somethin 
    transition stuff here etc 
}); 

वर्तमान मार्ग आप कर सकते हैं की जाँच करने के एम्बर से बाहर जानकारी चोरी, यहां कुछ जानकारी है जो मैंने कुछ बिंदु पर स्टैक ओवरफ़्लो से चुरा लिया है।

var router = App.__container__.lookup("router:main"); //get the main router 
var currentHandlerInfos = router.router.currentHandlerInfos; //get all handlers 
var activeHandler = currentHandlerInfos[currentHandlerInfos.length - 1]; // get active handler 
var activeRoute = activeHandler.handler; // active route 

आप नियंत्रक परीक्षण कर शुरू करते हैं, मैं कुछ जानकारी है कि http://discuss.emberjs.com/t/unit-testing-multiple-controllers-in-emberjs/1865

+0

Ember.run.next() को बिना किसी त्रुटि के चलाने के लिए मेरा परीक्षण मिला, लेकिन मुझे एक असफल संदेश मिल रहा है जिसमें कोई दावा नहीं था? हैंडलर पर वर्तमान जानकारी प्राप्त करने के लिए मुझे वर्तमान मार्ग में टैप करने के बारे में उपरोक्त उदाहरण पसंद है। मैं अपने परीक्षण में निश्चित रूप से इसके साथ खेलूँगा! – ganicus

संबंधित मुद्दे