13

Tôi có một bài kiểm tra mà mỗi khi tôi chạy nó, ném "UnknownError: lỗi không xác:. Quy mô cuộc gọi stack tối đa vượt quá"kiểm tra thước đo/hoa nhài ném "UnknownError: lỗi không rõ: Cuộc gọi tối đa ngăn xếp kích thước vượt quá"

Thử nghiệm này đang gọi một phương pháp trong một trong các dịch vụ của tôi được ghi vào Google Drive.

Kiểm tra không thành công là gọi hàm doDrive của tôi bằng "ui", có nghĩa là cập nhật mục Drive. Nếu tôi thay đổi một ký tự "ui" -> "ni", nghĩa là tạo một mục Drive mới, thử nghiệm sẽ hoạt động. Mã được thử nghiệm hoạt động tốt trong sử dụng bình thường.

it('should update a file', function() { 
browser.executeAsyncScript(function(callback) { 
    // get service 
    var service=angular.element(document.getElementById('ngapp')).injector().get('DriveQ') 
    // generate a title 
    var title = 'title of file'; 
    // call doDrive to create a new file 
    service.doDrive({t:'ui',id:'0B6B-RNrxsCu2Sll7JZTYy2aDA', item:{title:title}}) 
     .then(function (resp){ 
        resp.originalTitle=title; 
        callback(resp) 
      }); 
}).then(function(resp) { 
    expect(resp.title).toEqual(resp.originalTitle); 
}); 
}); 

Tôi đang sử dụng chrome webdriver trực tiếp, và tôi cũng có browser.ignoreSynchronization = true;

+0

Dịch vụ của bạn trông như thế nào? –

+0

đó là một đoạn mã phức tạp lớn xây dựng và gửi các giao dịch API REST của Google Drive. Các điểm chính ... (1) dịch vụ hoạt động tốt, nó chỉ là bài kiểm tra bị hỏng, (2) đường dẫn mã hầu như giống hệt nhau giữa một bài kiểm tra làm việc (REST PUT) và một thất bại (REST POST). Có một số khía cạnh cụ thể của dịch vụ có thể cần thiết không? – pinoyyid

+0

có một vài điều thường kích hoạt ngoại lệ cụ thể đó. Điều hiển nhiên đến với tâm trí là một đồng hồ $ trên một đối tượng –

Trả lời

13

Tôi đang gặp vấn đề tương tự. Tôi đã tìm thấy rằng trả về các đối tượng lớn từ trình duyệt đến thước đo góc dẫn đến số "UnknownError: lỗi không xác định: Kích thước ngăn xếp cuộc gọi tối đa đã vượt quá" lỗi.

Bạn nên kiểm tra độ phức tạp của đối tượng resp bạn đang gửi lại bằng gọi lại. Nếu quá lớn, hãy thử gửi lại ít dữ liệu hơn.

Điều này có thể xảy ra với executeAsyncScript, executeScriptevaluate (sử dụng executeScript).

Sửa bởi OP ...

Cố định bằng cách thay đổi callback(resp) để callback({title:resp.title}), tức là đơn giản hóa các đối tượng quay trở lại chỉ chứa những mặt hàng mà tôi đang aserting.

+1

Tôi phát hiện ra rằng bạn không thể truyền các đối tượng quá lớn cho trình duyệt. Tôi sử dụng tham số thứ hai của 'browser.executeScript' để truyền vào một phần tử và phải sử dụng hàm' getWebElement' để tránh lỗi này. – Olov

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