質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.47%

  • Ruby

    7931questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • RSpec

    185questions

    RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

rspec実行時のrbファイルの構成

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 890

sanami

score 14

下記のrspecファイルをエラーなしで実行するには、
どのようなrbファイルを作成すればよろしいでしょうか?

#---start---
require 'spec_helper'

describe Animal do
 context 'initialize' do
  let(:animal) {Animal.new}
  describe '.name' do
   subject { animal.name }
   it { expect(subject).to be_nil }
  end
  describe '.type' do
   subject { animal.type }
   it { expect(subject).to be_nil }
  end
  describe '#cries' do
   subject { animal.cries }
   it { expect(subject).to be_nil }
  end
 end
end
#---end---

spec_helper.rb
#---start---
$LOAD_PATH.unshift File.expand_path('../lib',FILE)

require 'animal'

#---end---

よろしくお願い致します。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

cries() メソッドの定義を追加すれば テストをパスします。

lib/animal.rb
```ruby class Animal   def name     @name   end   def name=(val)     @name = val   end   def type     @type   end   def cries=(val)     @cries = val   end   def cries     @cries   end end ```
$ rspec
...

Finished in 0.00273 seconds (files took 0.13491 seconds to load)
3 examples, 0 failures

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/06/11 20:44

    いつもご回答ありがとうございます。

    記述していただいた通りエラーなしで実行できたのですが、
    下記のようなsuperclassを用いた場合はrbファイルの構成はどうしたらよろしいでしょうか?

    anima_spec.rb
    #---start---
    require 'spec_helper'


    describe Animal do
    context 'initialize' do
    let(:animal) {Animal.new}
    describe '.name' do
    subject { animal.name }
    it { expect(subject).to be_nil }
    end
    describe '.type' do
    subject { animal.type }
    it { expect(subject).to be_nil }
    end
    describe '#cries' do
    subject { animal.cries }
    it { expect(subject).to be_nil }
    end
    end
    end
    #---end---

    dog_spec.rb
    #---start---
    require 'spec_helper'
    /

    describe Dog do
    describe '#superclass' do
    subject { Dog.superclass }
    it { expect(subject).to eq Animal }
    end
    let(:dog) {Dog.new}
    describe ',name' do
    subject { dog.name }
    it { expect(subject).to eq 'tom' }
    end
    describe ',type' do
    subject { dog.type }
    it { expect(subject).to eq 'dog' }
    end
    describe'#cries' do
    subject { dog.cries }
    it { expect(subject).to eq 'bark' }
    end
    end
    #---end---

    よろしくお願い致します。

    キャンセル

  • 2015/06/11 23:46

    $ cat lib/dog.rb
    class Dog < Animal

    def initialize
    @type = 'dog'
    @name = 'tom'
    @cries = 'bark'
    end

    end

    $ cat spec/spec_helper.rb
    $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)

    require 'animal'
    require 'dog'

    $ rspec
    .......

    Finished in 0.00466 seconds (files took 0.15541 seconds to load)
    7 examples, 0 failures

    キャンセル

  • 2015/06/16 13:10

    ご解答ありがとうございました。
    無事エラーなしで実行出来ました。

    キャンセル

0

エラーに至るまでの手順が不明ですが:

mkdir workspace;cd workspace
mkdir lib
bundle init # エディタから「gem 'rspec'」 を追記
bundle
rspec --init # 初期化(テンプレートの生成)

spec/animal_spec.rb にテスト内容を記述
lib/animal.rb にAnimal クラスとそのメソッドを記述
spec/spec_helper.rb の適当な箇所(行頭あたり)にrequire_relative '../lib/animal.rb を追記

以上でエラーなく動いてくれるはずです

詳細についてはRelish や、そのGetting started を参照してみてください

rspec の各コマンドについてはrspec --help で確認することができます

Guard(+ guard-rspec) を利用すると、ファイル内容の変更を検知して自動的にrspec を走らせてくれます

## Links

Publisher: RSpec - Relish
RSpec: Behaviour Driven Development for Ruby
rspec/rspec - GitHub
Rubyist Magazine - スはスペックのス 【第 1 回】 RSpec の概要と、RSpec on Rails (モデル編)
RSpecの入門とその一歩先へ ~RSpec 3バージョン~ - Qiita
guard/guard - GitHub
guard/guard-rspec - GitHub

edit: asciinema で手順を録画してみました
getting started rspec testing - asciinema

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/06/08 21:59

    申し訳ありません説明不足でした。

    どのようなrbファイルを通せばエラーが出ないかということなのですが、
    自作で作った下記のファイルで試すと

    animal.rb
    #---start---
    class Animal

    def name
    @name
    end
    def name=(val)
    @name = val
    end
    def type
    @type
    end
    def cries=(val)
    @cries = val
    end
    end
    #---end---

    c:\work>rspec spec\animal_spec.rb
    ..F

    Failures:

    1) Animal initialize #cries
    Failure/Error: subject { animal.cries }
    NoMethodError:
    undefined method `cries' for #<Animal:0x20a4dd0>
    # ./spec/animal_spec.rb:17:in `block (4 levels) in <top (required)>'
    # ./spec/animal_spec.rb:18:in `block (4 levels) in <top (required)>'

    Finished in 0.01302 seconds (files took 0.5398 seconds to load)
    3 examples, 1 failure
    このようなエラーが出てしまいます。


    Failed examples:

    rspec ./spec/animal_spec.rb:18 # Animal initialize #cries

    キャンセル

  • 2015/06/09 01:45

    メソッド:
    a. `def some_method(value);end`
    b. `def some_method=(value);en`d
    と、a, bこの2つは別物です

    テスト側ではa のほうを呼び出し、実装側ではb のほうを書いています
    あべこべなので、どちらかをどちらかに合わせる必要があるでしょう

    getter/setter とよばれる このようなメソッドを定義していく場合、Ruby ではattr_reader, attr_writer, attr_accessor の3つが用意されているので、そちらを利用するのがいいでしょう

    用例:

    ```
    class MyClass
    attr_writer :some_method

    def another_method; end
    end

    my_class = MyClass.new
    my_class.some_method = 10
    p my_class.some_method # => 10
    ```

    * [instance method Module#attr_accessor](http://docs.ruby-lang.org/ja/2.2.0/method/Module/i/attr_accessor.html)
    * [class Module](http://docs.ruby-lang.org/ja/2.2.0/class/Module.html#I_ATTR_WRITER)
    * [class Module](http://docs.ruby-lang.org/ja/2.2.0/class/Module.html#I_ATTR_READER)
    * [アクセスメソッド - クラスの概念 - Ruby入門](http://www.rubylife.jp/ini/class/index6.html)

    キャンセル

関連した質問

  • 受付中

    【RSpec】テストを関数のように再利用したい

    RSpecで他のテストで作ったテストを簡単に再利用する方法はありますか? イメージ     describe "テスト1" do         it "テスト1-1"  

  • 受付中

    RSpecでのARGVの扱い

    Rubyでedエディタのようなもの(実行時にファイルを引数に取り標準入力でコマンドを受け取り標準出力で結果を返す)を作っているのですが、RSpecでそのコードをテストしようと思った

  • 解決済

    ruby rspecのテストケースの書き方

    rspeの初心者です。 いままで扱っていたrubyのプログラムをrspec形式に書き直したいのですが、 どのように書けばいいかいまいち解らなので教えていただければと思います。 i

  • 解決済

    rspec エラーについて

    ruby のrspecで下記のエラーが出て困っています。 C:\tmp\spec>rspec sample_1_spec.rb C:/Ruby21/lib/ruby/site_r

  • 解決済

    Ruby rspec 引数についてのエラー

    コマンドプロンプトからrspecファイルを実行時に以下のエラーが出ていて困っています。 10 F. Failures:   1) argv 引数が数字の場合      Fai

  • 解決済

    rspec 変数について

    以下のようなspec.rbに対して、どのようなrbファイルを作成すればエラーなしでコンパイル可能でしょうか? dog_spec.rb ↓↓ require 'spec_help

  • 解決済

    rspec実行時のrbファイルの構成

    下記のspec.rbファイル実行時に、エラーなしになる形にしたいのですが どのようにrbファイルを編集すればよろしいでしょうか? dog_spec.rb ↓↓ #---start

  • 受付中

    rspec実行時のrbファイルの構成

    下記のrspecファイルをエラーなしで実行するには、  どのようなrbファイルを作成すればよろしいでしょうか?  #---start---  require 'spec_help

同じタグがついた質問を見る

  • Ruby

    7931questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • RSpec

    185questions

    RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。