これは技術的な質問であると同時に、プログラミングの練習問題でもあると思います。
私は Ruby on Rails チュートリアルを行っており、第 7 章の演習の質問 2 まで完了しています。この質問では、無効なユーザーのエラー メッセージが再読み込みされたサインアップ ページに表示されることを確認するテストを作成するよう求められます (パスワードが空白、電子メール アドレスが無効など)。 )。
十分に機能するコードがいくつかありますが、実際に何かをテストしているとは感じません。サインアップ ページに空白のユーザーを手動で入力したときに表示されるエラー メッセージの存在を簡単にテストしました。当然のことながら、テストは成功しました。エラー メッセージをコピーしてテストに貼り付けただけです。
私の関連部分は次のuser_pages_spec.rb
とおりです。
describe "signup" do
before { visit signup_path }
let(:submit) { "Create my account" }
describe "with invalid information" do
it "should not create a user" do
expect { click_button submit }.not_to change(User, :count)
end
describe "after submission" do
before { click_button submit }
it { should have_selector('title',text: 'Sign up') }
it { should have_content('error') }
it { should have_content('Password digest can\'t be blank') }
it { should have_content('Name can\'t be blank') }
it { should have_content('Email can\'t be blank') }
it { should have_content('Email is invalid') }
it { should have_content('Password can\'t be blank') }
it { should have_content('Password is too short (minimum is 6 characters)') }
it { should have_content('Password confirmation can\'t be blank') }
end
end
これは正しい方法ですか?エラーメッセージ/翻訳が何であるかをRubyに教えてもらい、それらをテストするべきではありませんか? パスワードの長さなど、検証条件の 1 つを変更するとどうなりますか? 同様に、Password Digest に関するエラー メッセージを修正する場合、テスト ファイルを変更する必要がありますか?
編集:正確なエラー文字列がわからない場合はどうすればよいですか? Ruby は、エラー メッセージが何であるかをテストに伝える必要がありますか? これには「have(x).errors_on」を使用する必要がありますか? .