2013-07-26 33 views
8

Tôi gặp sự cố khi thử nghiệm tích hợp với ember bằng cách sử dụng TDD guide của Toran Billup.Làm thế nào để làm thử nghiệm tích hợp Ember cho quá trình chuyển tuyến?

Tôi đang sử dụng Karma làm nhân vật thử nghiệm với Qunit và Phantom JS.

Tôi chắc chắn một nửa nếu phải làm gì với kiến ​​thức của người mới bắt đầu về vòng đua Ember. Câu hỏi của tôi là 2 phần:

1) Làm cách nào để bọc thử vist() vào vòng chạy đúng cách?

2) Làm cách nào để kiểm tra chuyển tiếp? Tuyến đường chỉ mục ('/') nên chuyển đổi thành một tuyến tài nguyên có tên '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"); 
     }); 
}); 

Cảm ơn bạn đã tìm mọi hướng đi đúng hướng.

+0

Bạn đang sử dụng phiên bản nào của ember? Tôi đã không đề cập đến một lỗi nghiêm trọng trong RC 6 bị hỏng khi bạn truy cập vào tuyến đường "/" https://github.com/emberjs/ember.js/issues/2997 –

+0

Ah! Tôi đang sử dụng R6.1! Xin lỗi, tôi quên đề cập đến trong câu hỏi của tôi. Cám ơn rất nhiều về sự giúp đỡ của bạn! – ganicus

Trả lời

7

tôi chỉ đẩy lên một ứng dụng ví dụ mà không một sự chuyển tiếp đơn giản khi bạn nhấn phím "/" lộ trình sử dụng ember.js RC5

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

các đơn giản "hello world" dụ trông như thế này

1.) các te mplate bạn được chuyển đến trong quá trình chuyển

<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.) mã ứng dụng 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.) kiểm tra tích hợp trông như thế này

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.) trình trợ giúp tích hợp tôi sử dụng trên hầu hết các dự án ember.js của mình

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

tôi không quen với Karma, nhưng các phần của thử nghiệm của bạn mà cần phải tương tác với ember nên được đẩy vào vòng chạy (như bạn đã đề cập)

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

Để kiểm tra các tuyến đường hiện tại bạn có thể ăn cắp thông tin ra khỏi ember ra, đây là một số thông tin tôi lấy trộm từ tràn ngăn xếp tại một số điểm.

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 

Nếu bạn bắt đầu thực hiện thử nghiệm điều khiển, tôi đã viết lên một số thông tin trên đó http://discuss.emberjs.com/t/unit-testing-multiple-controllers-in-emberjs/1865

+0

Ember.run.next() đã làm cho thử nghiệm của tôi chạy mà không có lỗi, nhưng tôi nhận được thông báo Không nói rằng không có xác nhận? Tôi thích ví dụ trên về cách khai thác vào tuyến đường hiện tại để nhận thông tin hiện tại về các trình xử lý. Tôi chắc chắn sẽ chơi với nó trong thử nghiệm của tôi! – ganicus

Các vấn đề liên quan