目的
WindowsにElixirライブラリのESpecを導入する。
実行環境
OS: Windows8.1
Erlang: Eshell V6.4, OTP-Version 17.5
Elixir: v1.0.4
ESpec: v0.6.3
Erlang: Eshell V6.4, OTP-Version 17.5
Elixir: v1.0.4
ESpec: v0.6.3
始める前に
espec_phoenixが動かなかったお!
でも、ElixirでもBDDがしたいんだお!!
ならESpecを使えばいいんだお!!!!
でも、ElixirでもBDDがしたいんだお!!
ならESpecを使えばいいんだお!!!!
うざくてすいません・・・
(知り合いが隣でスライド作成にやる夫を入れてたせいだ)
(知り合いが隣でスライド作成にやる夫を入れてたせいだ)
実際の所、「espec_phoenixを使う必要性があるのか?」と考えてみました。
やりたいことはElixir(可能ならPhoenix)でBDDがしたいわけです。
やりたいことはElixir(可能ならPhoenix)でBDDがしたいわけです。
espec_phoenixの元になっているのがESpecですね。
ならESpecでいいんじゃないかな~っと思うわけです。
ならESpecでいいんじゃないかな~っと思うわけです。
別にDBが必要なら自分でテスト環境のDBを用意すればいいだけですし・・・
最悪、junit+dbunitみたいな感じで、
db_ESpecのようなものを作成してしまえばいいんじゃないかな~っと思うわけです。
(言い訳はこれくらいで大丈夫かな)
最悪、junit+dbunitみたいな感じで、
db_ESpecのようなものを作成してしまえばいいんじゃないかな~っと思うわけです。
(言い訳はこれくらいで大丈夫かな)
では、ESpecを導入して、
楽しい楽しいBDDをやりましょう~!!
楽しい楽しいBDDをやりましょう~!!
今回のプロジェクト生成。
>cd プロジェクト生成ディレクトリ
>mix new espec_sample
>cd espec_sample
>mix test
以降、この記事中でプロジェクトと言えば、
espec_sampleを指し示すものとする。
espec_sampleを指し示すものとする。
目次
- ESpecって何だ?
- ESpecを使用する準備をしよう
- ElixirでもBDDがしたい!!
1. ESpecって何だ?
ESpecって何だろうか?
READMEに書いてあります。
READMEに書いてあります。
ESpecは、Elixirで作られたBDD Test-Frameworkです。
(ESpecはRSpecの影響を受けています)
まぁ、RSpec(Ruby)のElixir版って思っておkだと思います。
(ESpecはRSpecの影響を受けています)
まぁ、RSpec(Ruby)のElixir版って思っておkだと思います。
さて、BDDって何だろうか?
恥ずかしながら、BDDと言うものをこの間まで知らなかった次第です。
なので、この記事で少しBDDの知識を取り得れておきます。
恥ずかしながら、BDDと言うものをこの間まで知らなかった次第です。
なので、この記事で少しBDDの知識を取り得れておきます。
良い記事を見つけました。
(この記事を見れば書く必要がない気がする・・・)
数行でまとめる程度でいっか。
(この記事を見れば書く必要がない気がする・・・)
数行でまとめる程度でいっか。
BDD(=振る舞い駆動開発)とは、TDDから派生したテスト手法の一種です。
テストは「振る舞い」の記述に特化している。
以上!
テストは「振る舞い」の記述に特化している。
以上!
後は以下のリンクを参考にして下さい。
参考: テスト駆動開発/振る舞い駆動開発を始めるための基礎知識 (1/3)
参考: テスト駆動開発/振る舞い駆動開発を始めるための基礎知識 (1/3)
2. 使用する準備をしよう
mix.exsに以下の記述を追加する。
defp deps do
...
{:espec, "~> 0.6.3", only: :test},
...
end
依存関係の解決します。
>mix deps.get
...
初期化処理をします。
変数を設定しないといけないです。
(以前、痛い目を見たから警戒する・・・)
変数を設定しないといけないです。
(以前、痛い目を見たから警戒する・・・)
>set MIX_ENV=test
>mix espec.init
* creating spec
* creating spec/spec_helper.exs
* creating spec/example_spec.exs
mix.exsのproject部分に以下の行を追加して下さい。
追加行: preferred_cli_env: [espec: :test]
追加行: preferred_cli_env: [espec: :test]
def project do
[app: :espec_sample,
version: "0.0.1",
elixir: "~> 1.0",
build_embedded: Mix.env == :prod,
start_permanent: Mix.env == :prod,
deps: deps,
preferred_cli_env: [espec: :test]]
end
最初のspecテストを実行してみます。
(生成されたサンプルのテストしかないですけどね・・・)
(生成されたサンプルのテストしかないですけどね・・・)
>mix espec
Compiled lib/espec_sample.ex
Generated espec_sample app
[32m. [0m [32m. [0m [33m* [0m [32m. [0m [33m* [0m
1) ExampleSpec ExampleSpec xcontext skips examples. And xit also skips
[36mc:.../espec_sample/spec/example_spec.exs:34 [0m
[33mTemporarily skipped with: `xit`. [0m
2) ExampleSpec ExampleSpec There are so many features to test!
[36mc:.../espec_sample/spec/example_spec.exs:39 [0m
[33mPending with message: There are so many features to test!. [0m
[33m5 examples, 0 failures, 2 pending [0m
[33mFinished in 0.16 seconds (0.14s on load, 0.01s on specs) [0m
文字化けしてますけど大丈夫そうですね。
(failuresが2つ出てますがexampleだしいいか・・・
後でファイル消しますし、exampleだから失敗する例でも書いているのでしょう。
(failuresが2つ出てますがexampleだしいいか・・・
後でファイル消しますし、exampleだから失敗する例でも書いているのでしょう。
3. ElixirでもBDDがしたい!!
specのテスト対象にしたいソースコードについて先に書いておこう。
引用:
Place your _spec.exs files into spec folder. use ESpec in the ‘spec module’.
翻訳:
specフォルダ(ディレクトリ)へ自分の”_spec.exs”ファイルを置きます。「spec module」を使ってESpecを利用して下さい。
specフォルダ(ディレクトリ)へ自分の”_spec.exs”ファイルを置きます。「spec module」を使ってESpecを利用して下さい。
と言うことだそうです。
specのディレクトリ配下にsample_spec.exsのように配置しろってことですね。
specのディレクトリ配下にsample_spec.exsのように配置しろってことですね。
ではサンプルを作成してテストしましょう。
READMEにあったサンプルは以下です。
READMEにあったサンプルは以下です。
ファイル名: spec/some_spec.exs
defmodule SomeSpec do
use ESpec
it do: expect(1+1).to eq(2)
it do: (1..3) |> should have 2
end
記法がさっぱり分かりません><
まぁいいです。追々、学んでいきましょう!
まぁいいです。追々、学んでいきましょう!
実行してテストが流れるか確認してみましょう。
>mix espec
[32m. [0m [32m. [0m [33m* [0m [32m. [0m [33m* [0m
1) ExampleSpec ExampleSpec xcontext skips examples. And xit also skips
[36mc:.../espec_sample/spec/example_spec.exs:34 [0m
[33mTemporarily skipped with: `xit`. [0m
2) ExampleSpec ExampleSpec There are so many features to test!
[36mc:.../espec_sample/spec/example_spec.exs:39 [0m
[33mPending with message: There are so many features to test!. [0m
[33m5 examples, 0 failures, 2 pending [0m
[33mFinished in 0.16 seconds (0.14s on load, 0.01s on specs) [0m
先ほどと変わりません。実行できたのでしょうか?
先ほどのfailures以外は出てないので大丈夫だと思いますが・・・
分かりやすく見るために個別実行してみます。
先ほどのfailures以外は出てないので大丈夫だと思いますが・・・
分かりやすく見るために個別実行してみます。
>mix espec spec/some_spec.exs
[32m. [0m [32m. [0m
[32m2 examples, 0 failures [0m
[32mFinished in 0.09 seconds (0.08s on load, 0.01s on specs) [0m
個別でテストをしてfailuresが出てないので問題ないと判断します。
ちなみにhelpが見たければ以下のコマンドを実行して下さい。
※ 但し、変数は設定しておかなければいけません。
※ 但し、変数は設定しておかなければいけません。
>set MIX_ENV=test (設定しているなら不要)
>mix help espec
機能的なところはREADMEに一杯あります。
とりあえず、こんなところで終了します。
もっと詳しく知りたい人はREADMEを読んで下さい。
とりあえず、こんなところで終了します。
もっと詳しく知りたい人はREADMEを読んで下さい。
管理人の独り言~
ESpec_Phoenixでやらかした感じがする・・・
引用:
You must require this helper in your spec_helper.exs.
Also you need restart Ecto transaction before each example.
So spec_helper.exs should look like:
DBが残って導入失敗したよって書いてたけど、
READMEを見直したら上記の文言中にneed restart Ectoとある・・・
READMEを見直したら上記の文言中にneed restart Ectoとある・・・
簡単に和訳すると、
「各自で動かす時にEctoを再起動する必要があるぜ!!」的なことが書かれている。
「各自で動かす時にEctoを再起動する必要があるぜ!!」的なことが書かれている。
ってことは・・・自分でテストを流す前に、
手動でテスト用のDBを”ecto.drop(適切な処理なのか不明)”
させるようなことをやらなければならないのでは?
手動でテスト用のDBを”ecto.drop(適切な処理なのか不明)”
させるようなことをやらなければならないのでは?
後で試してみよう・・・
やってしまった気がする・・・
やってしまった気がする・・・