2012-01-26 29 views
33

Tôi đang viết một ứng dụng mà bạn muốn kiểm tra xem chế độ xem có không có một số chức năng hay không - đặc biệt vì chức năng đó chỉ được trình bày cho người dùng trong nhóm bảo mật nhất định. Tôi đang tìm kiếm đối diện của assert_selects để thấy rằng một menu là không phải là được hiển thị.Đối diện của assert_select?

Trả lời

41

Hãy nhìn vào các tài liệu ở đây:

http://apidock.com/rails/ActionController/Assertions/SelectorAssertions/assert_select

Từ các tài liệu:

assert_select là một assertion that selects elements and makes one or more equality tests.

và từ các thử nghiệm bình đẳng s ections:

Các thử nghiệm bình đẳng có thể là một trong những cách sau:

đúng - Khẳng định là đúng nếu ít nhất một thành phần được chọn.

false - Xác nhận là đúng nếu không có phần tử nào được chọn.

Chuỗi/Regexp - Xác nhận là đúng nếu giá trị văn bản của ít nhất một thành phần khớp với chuỗi hoặc cụm từ thông dụng.

Số nguyên - Xác nhận là đúng nếu chính xác số lượng thành phần đó là được chọn.

Phạm vi - Xác nhận là đúng nếu số phần tử đã chọn phù hợp với phạm vi .

Nếu không có kiểm tra bình đẳng được chỉ định, xác nhận là đúng nếu ít nhất một phần tử được chọn.

Và một ví dụ đơn giản:

# Page contains no forms 
    assert_select "form", false, "This page must contain no forms" 
0

Bạn có thể dễ dàng xác định của riêng bạn:

module ActionDispatch::Assertions::SelectorAssertions 
    def assert_no_select(*a,&b) # try to think of a better name! 
    begin 
     assert_select(*a,&b) 
    rescue AssertionFailedError 
     return 
    end 
    raise "fail" # there should be a better built-in alternative 
    end 
end 
+0

Điều này sẽ không hoạt động khi 'AssertionFailedError' được nâng lên trước khi phủ định được đánh giá. – gertas

+0

Điểm tốt! Đã chỉnh sửa. –

26

Đừng quên bạn luôn có thể vượt qua trong tính, và thiết lập đó không.

assert_select "a", {count: 0, text: "New"}, "This page must contain no anchors that say New" 
+0

Điều này không hiệu quả đối với tôi: Không có ngoại lệ nào được nâng lên ngay cả khi tìm thấy phần tử. –

+1

Cập nhật: Nó hoạt động tốt cho bất kỳ phần tử nào khác ngoài 'nội dung'. –

+0

Điều cần biết! Cảm ơn @MatijsvanZuijlen – GantMan

2

Tôi gặp sự cố này để đảm bảo KHÔNG có nút 'Xóa', trong số nhiều nút. Câu trả lời được chấp nhận sẽ không hoạt động trong tình huống này vì đã có một số nút.

assert_select '.button' do |btn| 
    btn.each do |b| 
    assert_no_match 'Delete', b.to_s 
    end 
end 

Tuy nhiên, tôi thực sự thích câu trả lời của GantMan tốt hơn!

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