6

Câu hỏi bối cảnh:làm thế nào để kiểm tra i18n trong Rails với RSpec

để nói rằng có một số hàng thực sự quan trọng trong việc config/miền địa phương/en.yml đó là rất quan trọng để tồn tại.

en: 
    foo: 
    bar: "bubla!" 
  • Tôi không muốn để kiểm tra tất cả các dòng duy nhất nhưng
  • tôi không muốn thử nghiệm là quá giòn (vì vậy không I18n.t ('foo.bar'). Nên = ~/bubla /)

nên cách tôi hiện đang thử nghiệm là như thế này

#spec/locals_spec.rb 

require 'spec_helper' 
describe I18n do 
    it do 
    I18n.t('date.datepicker').should be_kind_of(String) 
    end 
end 

cách này tôi chỉ đảm bảo dịch mà tồn tại và rằng nó không tiếp tục (ví dụ 'f oo.bar.car.lol'

nhưng tôi vẫn không hài lòng

Câu hỏi: các thực hành tốt nhất để kiểm tra bản dịch i18n với RSpec và ở đâu trong thư mục spec tôi nên đặt chúng là gì?

+0

sau khi @Paul trả lời Tôi tái cấu trúc: nó {I18n.available_locales.each {| locale | I18n.t ('date.datepicker'). Nên be_kind_of (String)} – equivalent8

Trả lời

0

tôi nghĩ rằng tôi sẽ viết một bài kiểm tra chấp nhận cho một điều "quan trọng" như vậy.

trong hầu hết các trường hợp, bạn cần bản dịch trong một số ngữ cảnh cụ thể, ví dụ: hiển thị nội dung nào đó trong một datepicker. tôi sẽ kiểm tra bối cảnh đó bằng cách sử dụng capybara hoặc bất cứ điều gì làm việc với một trình điều khiển javascript.

chỉ cần thử nghiệm rằng bản dịch này tồn tại là vô ích nếu bạn không có ngữ cảnh được sử dụng trong đó.

+0

Bạn nhận được bối cảnh ngay từ đọc từ khóa "datapicker" :) ... hãy nói rằng tôi có helper sẽ xử lý tất cả các rendering của các đầu vào datepicker . Tôi đã tạo ra đặc tả trợ giúp để kiểm tra xem tất cả mọi thứ có hiện diện hay không. Nhưng tôi đang stubbing I18n để trở về giá trị giả I18n.stub (: t) {'exampleformat'} .... vì vậy theo cách này tôi chắc chắn rằng ngữ cảnh html được hiển thị chính xác, Nó chỉ là bản dịch thực sự mà tôi đang lo lắng. .. nguồn tại https: //gist.github.com/3053409 helper là ở phía dưới – equivalent8

4

Kiểm tra this StackOverflow question để biết một số ý tưởng. Cách ưa thích của tôi là this answer trên cùng một câu hỏi.

Cập nhật: Những ngày này tôi có xu hướng sử dụng i18n-tasks đá quý để xử lý thử nghiệm nào liên quan đến i18n, và không phải những gì tôi đã viết ở trên hoặc đã trả lời trên StackOverflow trước đó.

Tôi muốn sử dụng i18n trong các bài kiểm tra RSpec của tôi chủ yếu để đảm bảo rằng tôi đã dịch cho mọi thứ tức là không có bản dịch nào bị bỏ sót. Các nhiệm vụ i18n có thể thực hiện điều đó và nhiều hơn nữa thông qua phân tích tĩnh của mã của tôi, vì vậy tôi không cần chạy thử nghiệm cho tất cả I18n.available_locales nữa (ngoài việc thử nghiệm chức năng rất địa phương cụ thể, chẳng hạn như chuyển từ bất kỳ ngôn ngữ nào sang bất kỳ địa phương khác trong hệ thống). Làm điều này có nghĩa là tôi có thể xác nhận rằng tất cả các khóa i18n trong hệ thống thực sự có giá trị (và không có giá trị nào không sử dụng hoặc lỗi thời), trong khi vẫn giữ số lần kiểm tra lặp đi lặp lại, và do đó thời gian chạy của bộ phần mềm giảm xuống.

+0

hey, thanx cho câu trả lời nhưng nói chung giải pháp của bạn là giống như @Phoet mô tả trong bài dưới đây, xin vui lòng đọc bình luận của tôi, tuy nhiên tôi thích ý tưởng của looping trought * I18n.available_locales.each * + 1 cho rằng – equivalent8

+0

@ equivalent8, hơi trễ một chút, nhưng hy vọng bản cập nhật của tôi phục vụ trong việc cung cấp một giải pháp thay thế khác để thử nghiệm i18n. Nếu bạn đã học được điều gì khác kể từ lần cập nhật cuối cùng của bạn cho câu hỏi này, hãy chia sẻ! –

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