2015-05-19 18 views
5

Tôi đang gặp sự cố khi gửi yêu cầu HTTP nhận được trong Thước đo góc. Trên thực tế, tôi cần phải kiểm tra dữ liệu trong DB sau khi thực hiện một số hành động trong giao diện người dùng.Cách thực hiện yêu cầu HTTP GET + POST trong Thước đo

Sẽ rất hữu ích nếu tôi có thể làm điều đó bằng cách sử dụng JQuery, nhưng tôi không thể tìm cách sử dụng JQuery bên trong Thước đo góc.

Cần trợ giúp !!

Thực ra, chúng tôi đã cố gắng sử dụng NODEJS lib như được hiển thị bên dưới, nhưng phải đối mặt với các vấn đề trong đó.

var http = require('http'); 

    var json_data; 

    http.get('SiteUrl', function(response) { 
     var bodyString = ''; 
     response.setEncoding('utf8'); 

     response.on("data", function(chunk) { 
      bodyString += chunk; 
     }); 

     response.on('end', function() { 

      json_data = bodyString; 
      console.log("1---->"+json_data); 
     }); 

    }).on('error', function(e) { 
     console.log("There is an error in GET request"); 
    }); 
    console.log("2---->"+json_data); 

Sau khi gỡ lỗi, chúng tôi nhận thấy rằng sự cố là Thước đo không chờ yêu cầu HTTP hoàn tất và chỉ truyền lại. Chúng tôi đang nhận được "2 ---->" đầu tiên trong giao diện điều khiển và sau đó "1 ---->".

+0

yêu cầu Ajax tới một URL đặc biệt cho hoạt động này? Không nên khó khăn, mặc dù tôi không biết thước đo góc – hanshenrik

+0

Thực ra, thước đo góc là để thử nghiệm E2E cho ứng dụng AngularJS. Chúng tôi không thể đưa ra yêu cầu Ajax, tôi nghĩ kiến ​​thức về Protractor là điều cần thiết để trả lời câu hỏi này. –

+0

Chức năng 'kết thúc' với log1 là không đồng bộ, do đó, nó vượt qua lôgic sau log2 ... –

Trả lời

0

Tôi nghĩ đó không phải là câu trả lời đúng mà bạn đang tìm kiếm. Bạn chưa đề cập đến tên db đó.

Tôi đang sử dụng http://frisbyjs.com/ để nhận tài liệu từ couchdb (cơ sở dữ liệu tài liệu) trong dự án thước đo góc và hoàn thành mục đích của tôi rất tốt.

+0

Chúng tôi đang sử dụng tìm kiếm Elastice làm DB, chúng tôi chỉ cần nhấn một URL để tìm nạp dữ liệu từ đó. –

+0

thử này frisby – hasan

3

Bạn không thể truy cập vào jQuery (mặt trước của nó) từ thước đo góc, bởi vì bộ kiểm thử thước đo góc chỉ là tập lệnh NodeJS (bên phụ trợ). Vì vậy, bạn có thể sử dụng API HTTP NodeJS (hoặc một yêu cầu lib khác).

Kiểm tra ví dụ này: http://squirrel.pl/blog/2014/01/15/direct-server-http-calls-in-protractor/

+0

Trên thực tế, chúng tôi đã cố gắng sử dụng lib như hình dưới đây, nhưng phải đối mặt với các vấn đề trong đó. var http = require ('http'); –

+0

Tôi đã cập nhật bài đăng ở trên xin hãy xem. –

2

tôi cũng sử dụng http module (cho mục đích khác nhau, ví Reinitialization của cơ sở dữ liệu).

Để làm thước đo chờ đợi kết thúc yêu cầu, sử dụng hứa hẹn

var http = require('http'); 

var json_data; 

http.get('SiteUrl', function(response) { 
    var bodyString = ''; 
    response.setEncoding('utf8'); 

    response.on("data", function(chunk) { 
     bodyString += chunk; 
    }); 

    response.on('end', function() { 
     json_data = bodyString; 
     console.log("1---->"+json_data); 
     // All the processing and Angular code should be here 
     console.log("2---->"+json_data); 
    }); 

}).on('error', function(e) { 
    console.log("There is an error in GET request"); 
}); 

Nếu bạn không thích cách đặt tất cả các xử lý dữ liệu vào response.on ('kết thúc') gọi lại, sau đó hãy gọi lại một chức năng riêng biệt.

Ngoài ra tôi phải nói rằng Thước đo không được dự định sẽ được sử dụng để kiểm tra cơ sở dữ liệu trực tiếp. Đây là thử nghiệm từ đầu đến cuối. Bạn nên xây dựng một kịch bản phức tạp để viết một số dữ liệu trên một trang, chuyển đến một trang khác và hy vọng rằng dữ liệu được cập nhật.

+1

Để mở rộng phần làm cho Protractor chờ đợi, có một vài điều bạn có thể làm. Bạn có thể chuyển hàm 'done' thành' beforeEach' hoặc 'it', ví dụ: 'beforeEach (function (done) {doMyPromiseStuff.then (done)}' Hoặc bạn có thể thêm một nhiệm vụ vào luồng điều khiển. Bạn sẽ cần sử dụng http://angular.github.io/protractor/#/api ? view = webdriver.WebDriver.prototype.call – Jmr

-1

Còn thứ gì đó như thế này thì sao?

http://eitanp461.blogspot.com.ar/2014/01/advanced-protractor-features.html

bài này đề xuất để tái sử dụng một mô-đun AngularJS đã tồn tại để chèn dữ liệu vào DB sử dụng chức năng addMockModule.

Điều này có thể được sửa đổi để tiêm một AngularJS mới moudule như một mô hình với tất cả các tính năng mà bạn muốn, như kiểm tra công cụ, inseeting dữ liệu, vv Vì đây là một module/dịch vụ góc nó nên sử dụng các mô-đun AngularJS http do đó Thước đo góc sẽ biết cách xử lý nó.

Nhược điểm? Vâng điều này có thể cần một bối cảnh AngularJS để chạy, không biết nếu nó sẽ làm việc trong các ứng dụng không góc (hoặc các phần của nó, giống như một đăng nhập không agular).

Suy nghĩ?

+0

Tôi sẽ trả lời câu hỏi của riêng mình và nói rằng điều này có lẽ là quá mức cần thiết, tôi nghĩ rằng @NicoPennec đã chỉnh sửa toàn bộ thời gian. Liên kết mà anh ấy đã đăng (http: // squirrel .pl/blog/2014/01/15/direct-server-http-call-in-protractor /) có một ví dụ điển hình. – Falcon

0

Tôi đã đăng cùng một câu hỏi trên trang vấn đề gắt gỏng của Protractor, nhưng họ không thể trả lời câu hỏi của tôi; vì vậy, tôi tìm thấy một thay thế cho điều này. Tôi đã phá vỡ trường hợp thử nghiệm của tôi thành 2 trường hợp thử nghiệm. Trong 1, tôi chỉ cần nhấp vào nút và trong 2 tôi đã có thể lấy json và thực hiện xác nhận trên nó.

2

Nó làm việc cho tôi:

var request = require('request'); 

var options = { 
    method: 'POST', 
    url: 'http://testurl.com/endpoint/test/', 
    headers: {'id': 'ABCD', 
     'sessionid': 'dummyId', 
     'Accept': 'application/json', 
     'Accept-Language': 'en-us' 
    }, 
    body: '{ "pay_load": [] }' 
}; 

function callback(error, response, body) { 
    if (!error && response.statusCode == 200) { 
     var info = JSON.parse(body); 
     console.log(body); 
     console.log(info); 
    } 
} 

request(options, callback); 
Các vấn đề liên quan