Tôi nhận được kết quả kỳ lạ với người giúp đỡ thử nghiệm của Ember andThen
và click
. Theo documentation Ember của:Vấn đề thử nghiệm tích hợp Ember.JS với andThen và nhấp vào người trợ giúp
các
andThen
helper sẽ đợi cho tất cả những người giúp đỡ không đồng bộ trước để hoàn thành trước khi tiến về phía trước.
Tuy nhiên, tôi thấy điều này dường như không phải lúc nào cũng đúng. Trong ví dụ bên dưới, có 3 câu hỏi console.debug
. Tôi sẽ mong đợi họ được đăng nhập theo thứ tự A -> B -> C. Tuy nhiên, tôi luôn nhận được thứ tự này: A -> C -> B. Tôi chỉ có thể nhận được thứ tự ABC dự kiến khi tôi chỉ sử dụng 1 trong hai lần nhấp người giúp đỡ. Không có trình xử lý sự kiện (hành động) nào được liên kết với phần tử <div>
được tham chiếu trong trình trợ giúp nhấp chuột.
Mọi người có thể giải thích hành vi bất ngờ này không? Có lỗi trong việc tôi sử dụng những người trợ giúp không? Hoặc một lỗi với khung kiểm tra của Ember?
andThen(function() {
console.debug('mark A');
click('div:first'); // with just 1 click helper, debug order is ABC
click('div:first'); // with this second click helper, debug order is ACB
andThen(function() {
console.debug('mark B');
});
});
andThen(function() {
console.debug('mark C');
});
Sửa:
Dựa trên câu trả lời được đưa ra bởi Kingpin2k, tôi đã kết thúc theo đuổi các giải pháp sau đây để có được phong cách kiểm tra tôi đang tìm kiếm.
Trước tiên, tôi đã tạo một trình trợ giúp thử nghiệm không đồng bộ có tên next
. Thứ hai, tôi đã thay thế tất cả những người trợ giúp andThen
trong mã của mình bằng số người trợ giúp tùy chỉnh next
. Điều này cho phép mã của tôi chạy theo thứ tự tôi mong đợi.
// test-helper.js
Ember.Test.registerAsyncHelper('next', function(app, fn) {
fn();
});
// my-integration-test.js
next(function() {
console.debug('mark A');
click('div:first');
click('div:first');
next(function() {
console.debug('mark B');
});
});
next(function() {
console.debug('mark C');
});
lời giải thích của bạn là khác với những gì tôi đã hiểu căn cứ vào tài liệu tại http://emberjs.com/guides/ kiểm tra/thử nghiệm-người trợ giúp/# toc_wait-người trợ giúp. Nhưng lời giải thích của bạn có ý nghĩa và đưa tôi đến giải pháp mà tôi đã mô tả trong bài đăng đã chỉnh sửa. – jake
Đó là một chút ẩn, nhưng nó ngụ ý trong tuyên bố này 'Lưu ý và sau đó có một đối số duy nhất của hàm có chứa mã để thực thi sau khi các trình trợ giúp thử nghiệm khác đã hoàn thành.', nhưng câu lệnh này' Trình trợ giúp và sau đó sẽ đợi tất cả trước đó những người trợ giúp không đồng bộ để hoàn thành trước khi tiến lên phía trước.' là gây hiểu nhầm, thực sự bạn cần phải đọc chúng cùng nhau để có một tuyên bố chính xác. Nó thực sự có nghĩa là mã được chèn vào sẽ không thực thi cho đến khi lời hứa toàn cầu hiện tại hoàn thành, nhưng nó sẽ tiếp tục với mã bên ngoài và sau đó. – Kingpin2k