Tôi đang làm việc trên một số câu chuyện về dưa chuột cho ứng dụng 'đăng ký' có một số bước.Biến phiên với Câu chuyện về dưa chuột
Thay vì viết một câu chuyện của Hữuuuuuuge để bao gồm tất cả các bước cùng một lúc, sẽ là xấu, tôi muốn làm việc thông qua từng hành động trong bộ điều khiển như người dùng thông thường. Vấn đề của tôi ở đây là tôi đang lưu trữ ID tài khoản được tạo trong bước đầu tiên dưới dạng biến phiên, vì vậy khi bước 2, bước 3, vv được truy cập, dữ liệu đăng ký hiện có được tải.
Tôi biết có thể truy cập controller.session[..]
trong thông số kỹ thuật RSpec tuy nhiên khi tôi cố gắng làm điều này trong câu chuyện dưa chuột không thành công với lỗi sau (và, tôi cũng đọc ở đâu đó đây là mẫu chống vân vân, v.v. ..):
Sử dụng controller.session [: bất cứ điều gì] hoặc phiên [: bất cứ điều gì]
You have a nil object when you didn't expect it!
The error occurred while evaluating nil.session (NoMethodError)
Sử dụng phiên (: bất cứ điều gì)
wrong number of arguments (1 for 0) (ArgumentError)
Vì vậy, có vẻ như việc gia nhập cửa hàng phiên không thực sự khả thi. Những gì tôi đang tự hỏi là nếu nó có thể là có thể (và tôi đoán đó sẽ là tốt nhất ..):
- Mock ra các cửa hàng phiên vv
- Có một phương pháp trong điều khiển và còn sơ khai mà ra (ví dụ:
get_registration
chỉ định một biến mẫu ...)
Tôi đã xem qua cuốn sách RSpec (tốt, lướt qua) và xem qua WebRat v.v ... nhưng tôi chưa thực sự tìm thấy câu trả lời cho vấn đề của mình ...
Để làm rõ hơn một chút, quá trình đăng ký là nhiều hơn giống như một máy nhà nước - ví dụ người dùng tiến hành thông qua bốn bước trước khi đăng ký hoàn tất - do đó 'đăng nhập' không thực sự là một tùy chọn (nó phá vỡ mô hình trang web hoạt động như thế nào) ...
Trong thông số kỹ thuật của mình cho bộ điều khiển, tôi có thể để stub ra các cuộc gọi đến phương pháp tải mô hình dựa trên phiên var - nhưng tôi không chắc chắn nếu dòng 'antipattern' cũng áp dụng cho stubs cũng như mocks?
Cảm ơn!
Cảm ơn bạn đã nhập ... Tôi đã cập nhật câu hỏi của mình với một số chi tiết khác, nhưng những gì bạn đã đề xuất không thực sự hữu ích vì nó sẽ liên quan đến việc thêm chức năng đặc biệt cho các bài kiểm tra, mà đối với tôi có vẻ giống như một 'mô hình chống' - nhưng, sẽ loại bỏ các phương pháp điều khiển phá vỡ quy tắc này? –
chức năng bổ sung? Người dùng đăng nhập vào trang web của bạn như thế nào? Bạn đề cập đến quá trình đăng ký của bạn nhưng không đăng nhập. Tại sao bạn không thể tạo một nhà máy cho một người dùng đã đăng ký và đăng nhập chúng như tôi đã chỉ cho bạn ở trên? Câu chuyện về dưa chuột phải thể hiện chính xác cách người dùng tương tác với trang web của bạn. Người dùng không thể khai thác các phương thức điều khiển. Họ có các biểu mẫu để điền và liên kết để nhấp. Nó không phải là một thử nghiệm chấp nhận nếu nó không bắt chước hành vi của người dùng. – danpickett
Tôi thấy cả hai mặt ở đây.Tôi đã có gần như chính xác ở trên cho các tính năng kiểm tra xác thực hoạt động theo cách tôi muốn. Đối với các tính năng khác, có vẻ như một nỗi đau phải lặp lại các bước capybara đó để đăng nhập cho mọi tình huống. Dưa chuột có thể điều khiển trạng thái cơ sở dữ liệu cho mục đích thử nghiệm, tại sao không phải là phiên? –