6

Tôi đang cố gắng viết một thử nghiệm tích hợp Ember đơn giản và tiếp tục nhận được lỗi vòng lặp chạy bực bội mặc dù sử dụng Ember.run. Tôi đã có một cơn ác mộng của một thời gian cố gắng để có được điều này để làm việc, nếu có ai có thể giúp tôi tôi rất biết ơn. Cụ thể, tôi có thể thấy đăng nhập thử nghiệm và bắt đầu tải trang tiếp theo (vì nó nên), nhưng ngay khi thử nghiệm kết thúc, tôi nhận được lỗi đó. Điều này liên quan đến thử nghiệm thứ hai, lần đầu tiên vượt qua (như không có gì là không đồng bộ mà tôi tin).Thử nghiệm Ember: Bạn đã bật chế độ thử nghiệm, đã tắt tính năng tự động chạy của vòng lặp

import Ember from 'ember'; 
import startApp from 'jobs-tuftsdaily/tests/helpers/start-app'; 
import exists from 'jobs-tuftsdaily/tests/helpers/start-app'; 

var App; 

module('Integration - Landing Page', { 
    setup: function() { 
     App = startApp(); 
    }, 
    teardown: function() { 
     Ember.run(App, 'destroy'); 
    } 
}); 

test('Should load content', function() { 
    visit('/').then(function() { 
    ok(exists("*"), "Found HTML!"); 
    ok(exists('label:eq(4)'), "Slug label on page"); 
    }); 
}); 

test('Should sign in test user', function() { 
    Ember.run(function() { 
    visit('/').andThen(function() { 
     return fillIn("input[name=email]", "[email protected]"); 
    }).andThen(function() { 
     return fillIn("input[type=password]", "password"); 
    }).andThen(function() { 
     return click("button"); 
    }).andThen(function() { 
     ok(1, "stupid test passed"); 
    }); 
    }); 
}); 
+0

Mã sản xuất (thử nghiệm) trông giống như thế nào cho ứng dụng này? Tôi đoán là một số mã không đồng bộ là ném này nhưng thật khó để nói w/out chi tiết hơn –

+0

Tôi nhận được cùng một vấn đề này, nhưng chỉ trong firefox, không phải chrome. chưa thử nghiệm phantom hoặc safari hoặc tức là – stevethecollier

+1

bạn có tìm thấy giải pháp không? Tôi đang gặp vấn đề tương tự .. –

Trả lời

1

Bọc xét nghiệm của bạn trong Ember.run sẽ không giúp như lỗi mà bạn đang nhận được không xảy ra bởi vì các mã kiểm tra nhưng mã của ứng dụng của bạn. Trong tuyến đăng nhập của bạn, bạn phải thực hiện một số yêu cầu không đồng bộ (như AJAX hoặc setTimeout) và trong trình xử lý của chúng, bạn thực hiện một số thực thi API Ember (như cài đặt, chuyển đổi, bất kỳ thứ gì).

Nếu bạn muốn có bất kỳ trợ giúp chính xác nào về việc bạn cần đăng mã của mình trong tuyến đường/bộ điều khiển.

Gần đây, tôi đã xuất bản một cuốn sách điện tử về Run Loop, bao gồm cả cơ chế tự động chạy có thể là downloaded here.

3

Tôi nhận ra tôi muộn để đảng, nhưng ở đây đi anyway:

Một nơi nào đó trong thành phần hoặc ứng dụng của bạn mã (có nghĩa là, KHÔNG trong mã kiểm tra), bạn có thể nghe một số sự kiện bên ngoài của Ember (ví dụ như một sự kiện DOM, thông qua jQuery, hoặc một cái gì đó tương tự), nhưng cố gắng tương tác với nó trong suốt quá trình xử lý đó. Các chức năng xử lý này phải được bọc trong Ember.run.bind() hoặc chúng sẽ không có vòng lặp trong khi thử nghiệm. Ember.run.bind() cũng sẽ đặt this cho bạn trong khi xử lý.

Nếu bạn không quấn lời gọi sự kiện trong Ember.run.bind(), mã có thể vẫn chạy mà không gặp rắc rối trong khi chạy ứng dụng bình thường vì tính năng tự động chạy sẽ tìm thấy yêu cầu runloop (ví dụ: nếu bạn lên lịch sử dụng Ember.run.schedule() trong quá trình xử lý) tương tác với Ember trong mã và bắt đầu một runloop cho họ, nhưng nó bị tắt trong các thử nghiệm.

1

Tôi gặp vấn đề tương tự trong kiểm tra tích hợp của một thành phần. Lỗi này là:

Xác nhận không thành công: Bạn đã bật chế độ thử nghiệm đã tắt tự động chạy vòng lặp .

Bạn sẽ cần bao bọc bất kỳ mã nào có hiệu ứng phụ không đồng bộ trong khi chạy.

Và tôi đã tìm ra nguyên nhân của sự cố cho thử nghiệm tích hợp. Tôi đang render các thành phần với đoạn mã sau:

let myobject = Ember.Object.create({x:1}); 
this.set('param', myobject) 
this.render(hbs`{{my-object param=param}}`); 

Sau khi vẽ, cập nhật myobject như dưới đây gây ra lỗi .:

myobject.set('x',2); 

Bởi vì nó không phải là bên trong một ember chạy vòng lặp.

Thay vì gọi điện thoại erronous này, cập nhật các giá trị nên được thực hiện như là một trong các nội dung sau:

this.set('param.x',2); 
//OR: 
this.set('param', Ember.Object.create({x:1}); 
//OR: 
Ember.run(()=>{ 
    Ember.set(myobject,'x',2); 
}); 

Đối với trường hợp của bạn: Tôi không cố gắng nhưng quan điểm của tôi là những người giúp đỡ kiểm tra async như lần , bấm vào, fillIn có thể được sử dụng trong các bài kiểm tra chấp nhận không có trong các bài kiểm tra tích hợp vì lý do sau đây.

+1

'myobject.set ('x', 2);' so với 'this.set ('param.x', 2);' đã giúp tôi, cảm ơn! –

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