2013-08-12 30 views
5

Tôi đang sử dụng laika để thử nghiệm và gói meteor-router để định tuyến. Tôi muốn làm các bài kiểm tra điều hướng đến một số trang, điền vào biểu mẫu, gửi biểu mẫu và kiểm tra thư thành công nhưng tôi bị kẹt trên phần điều hướng. Đây là nỗ lực đầu tiên của tôi:Cách kiểm tra bộ định tuyến Meteor hoặc bộ định tuyến Iron với laika

var assert = require('assert'); 

suite('Router', function() { 
    test('navigate', function(done, server, client) { 
    client.eval(function() { 
     Meteor.Router.to('test'); 
     var title = $('h1').text(); 
     emit('title', title);   
    }) 
    .once('title', function(title) { 
     assert.equal(title, 'Test'); 
     done(); 
    }); 
    }); 
}); 

này không làm việc vì Meteor.Router.to không có gọi lại và tôi không biết làm thế nào để thực hiện dòng tiếp theo khi trang mới được tải.

Tôi cũng đã cố gắng với một cái gì đó như thế này

var page = require('webpage').create(); 

page.open('http://localhost:3000/test', function() { 
    ... 
} 

nhưng tôi đã nhận lỗi Error: Cannot find module 'webpage'

Sửa

Tôi chuyển sang iron router, vì vậy bất kỳ câu trả lời với điều đó cũng sẽ có Hữu ích.

+1

FYI: Nếu bạn mới bắt đầu, bạn có thể muốn chuyển sang https://github.com/EventedMind/meteor-iron-router, được tạo bởi các tác giả của hai bộ định tuyến sao băng được sử dụng rộng rãi gần đây nhất. –

Trả lời

0

Tôi đã gặp vấn đề tương tự. Tôi cần điều hướng đến một số trang trước khi chạy thử nghiệm của mình. Tôi đang sử dụng bộ định tuyến sắt. Tôi figured bạn không thể chỉ thực hiện Router.go('foo') và đó là nó. Bạn cần đợi cho đến khi việc định tuyến thực sự diễn ra. May mắn thay router sẽ đưa ra một phương thức Router.current() là một nguồn dữ liệu phản ứng sẽ thay đổi ngay sau khi trang của bạn sẵn sàng. Vì vậy, để hướng đến một lộ trình cụ thể trước khi chạy thử nghiệm của tôi, tôi trước hết chạy khối mã sau:

// route to /some/path 
client.evalSync(function() { 
    // react on route change 
    Deps.autorun(function() { 
     if (Router.current().path == '/some/path') { 
      emit('return'); 
      this.stop(); 
     } 
    }); 
    Router.go('/some/path'); 
}); 

Do đây là trong vòng một tất cả mọi thứ evalSync() rằng sau khối này sẽ được thực hiện sau khi định tuyến đã hoàn tất.
Hy vọng điều này sẽ hữu ích.

0

Laika hiện bao gồm chức năng waitForDOM() bạn có thể thiết lập để chờ một phần tử DOM cụ thể xuất hiện, trong trường hợp này sẽ là một phần tử trong trang bạn đang tải.

client.eval(function() { 
    Router.go('test'); 
    waitForDOM('h1', function() { 
     var title = $('h1').text(); 
     emit('title', title); 
    }); 
}); 

Tham số đầu tiên là bộ chọn jQuery.

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