1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Chef等でアプリケーションのテストでは使わないファイルを生成したときのServerspec

Posted at

文法チェックをしておく

アプリケーションコードのテストと Chef によるサーバ構築で共通化されないファイルがある場合、そのファイルの文法をミスしても「アプリケーションのテストで気づく」ことができない場合があります。
そこでテストでは最低限、言語の文法通りにファイルが作られていることは確認しておきます。

(Ruby の場合)

sample_spec.rb
  describe command("ruby -c sample.rb") do
    its(:stdout) { should match /Syntax OK/ }
    its(:stderr) { should be_empty }
  end

PHP であれば、 php -l file_name を使いましょう

チェックの意味でいうと stdout だけで充分ですが、stderr should be_empty としておけば、 fail したときに stderr の内容をテストの出力で見ることができるので便利です。

デフォルトにダミー値を入れておき、それが上書きされているかチェックしておく

たとえば構築したサーバで使うメールアドレスや外部ドメインを設定値として持ち、環境ごとにその値を変えるということがあると思います。
その場合は

  • attributes/default.rb で値の置き場所を確保しつつ
  • environments などでその attribute を override

といったことをすると思いますが、万が一 environments でキーを間違えてしまった場合に、想定した値を埋め込むことができなくなってしまいます。(未定義のキーに対する値を指定したとしても、何もエラーが出ないので。)

そこで、テスト時にそのようなミスを検出できるような書き方をします。
attributes のデフォルト値にはそれがダミーの値だということが分かる値を入れておいて、environments などでそれが上書きされ、ダミーの値がなくなっていることを確認します。

attributes/default.rb
default[:sample_domain] = 'example.com'
sample.erb
<%= node[:sample_domain] %>
sample_spec.rb
  describe file("sample.erb") do
    its(:content) { should_not match /example\.com/ }
  end

こうしておくと、仮に

sample.json
{
  "sample_domain___": "xxxx.com"
}

としてしまったときに、テストが fail するので気づきます。

※ダミーのドメインとしては、 example.com を使わないほうが良いですが、ここはあくまで例ということで。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?