2014-05-06 14 views
6

Tôi hiện đang cố gắng mô tả một API hiện có với apiary.io. Hệ thống thực hiện xác thực thông qua một yêu cầu đăng nhập trả về một http-cookie có chứa một session-id.Làm cách nào để mô tả các phiên trong định dạng kế hoạch chi tiết của api?

Theo như tôi biết, tiêu chuẩn là trình duyệt gửi tất cả các cookie http mà trước đó anh ta nhận được từ máy chủ lưu trữ trở lại khi thực hiện một yêu cầu khác.

Dường như điều này không được thực hiện bởi Dredd khi chạy thử nghiệm được tạo bởi tệp kế hoạch chi tiết của tôi. Và vì điều này, bất kỳ yêu cầu nào cần người dùng đăng nhập đều không hoạt động chính xác cho thử nghiệm.

Có khả năng đánh dấu yêu cầu là "cần phải trước khi chạy yêu cầu này" tương ứng để buộc Dredd quản lý các cookie http này không?

BTW, dịch vụ REST được triển khai trong Sails.js, khung mvc cho node.js.

Trả lời

0

Dredd có nghĩa là được chạy và chống lại thiết lập môi trường thử nghiệm, ví dụ: trong một công cụ CI với đồ đạc thử nghiệm. Nó không nên chạy trong môi trường sản xuất.

Với điều đó được cho là đôi khi có thể cần phải thực hiện các thao tác thiết lập hoặc teardown trong khi kiểm tra điểm cuối. Dự kiến ​​cuối cùng sẽ cung cấp test scenarios.

Nếu bạn cần chức năng thiết lập/ngăn nắp, bạn có thể sử dụng "móc" Dredd như được thảo luận here.

1

Đây là cũ nhưng tôi chỉ chạy vào cùng một vấn đề và các tài liệu Dredd khá trong ngày (không phải là mỉa mai ?!), vì vậy kể từ khi tôi figured it out này có thể giúp một ai đó :)

Bạn có thể đọc và ghi đè phản hồi và yêu cầu nội dung và tiêu đề bằng cách sử dụng hooks (đây là trang cập nhật nhất mà tôi tìm thấy về chủ đề nhưng vẫn gặp sự cố và lỗi chính tả). Một trong những caveat là dredd dường như không có người trợ giúp cho các tập tin cookie, do đó bạn phải phân tích cú pháp và xây dựng các tiêu đề cookie chính mình.

Trong trường hợp của tôi, sessionId quay lại nội dung json cũng như cookie: tôi đã phân tích cú pháp nội dung vì điều đó dễ dàng hơn nhưng bạn có thể truy xuất phiên từ cookie phản hồi nếu cần. Đây là khoảng móc tôi đã viết để làm cho auth công việc:

hooks = require('hooks'); 
stash = {} 

// hook to retrieve session on a login 
hooks.after('Auth > /remoteauth/userpass > POST', function(transaction){ 
    stash['token'] = JSON.parse(transaction.real.body)['sessionId']; 
}); 

// hook to set the session cookie in all following requests 
hooks.beforeEach(function(transaction){ 
    if(stash['token'] != undefined){ 
    transaction.request['headers']['Cookie'] = "id=" + stash['token'] 
    }; 
}); 

The docs giải thích làm thế nào để thiết lập các móc, mặc dù một điều mà vấp tôi là lệnh dredd --names không hoạt động nếu bạn có một tập tin dredd.yml trong cùng một thư mục (có vẻ như sự hiện diện của tập tin làm cho dredd bỏ qua tất cả các đối số dòng lệnh).

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