2016-04-04 66 views
-3

我試圖給all_empty?方法添加到核心紅寶石Array類像這樣:添加到紅寶石陣公開課的方法

class Array 
    def all_empty? 
    ... 
    end 
end 

不幸的是,下面的測試失敗:

require "spec_helper" 

describe Array do 
    context "#all_empty?" do 
    it "returns true if all elements of the Array are empty" do 
     expect(["", "", ""].all_empty?).to be_truthy 
    end 
    end 
end 

我得到以下NoMethodError:

NoMethodError: 
    undefined method `all_empty?' for ["", "", ""]:Array 
    Did you mean? empty? 
# ./spec/core_extensions_spec.rb:6:in `block (3 levels) in <top (required)>' 

如何獲取規格r認識到我已經定義了all_empty?方法?

編輯:這是在下面的意見要求對spec_helper.rb文件內容:

$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__) 
require_relative "../lib/tic_tac_toe.rb" 
+1

什麼是'spec_helper'?代碼如何加載? – sawa

+2

確保你的'Array' monkeypatch被加載_before_ test被執行。 – mudasobwa

回答

0

你應該require文件到您的規範來qccess方法(all_empty?)可以定義排列這個。或者你可以在spec_helper.rb中要求它

認爲rspec默認將當地的lib目錄添加到加載路徑中。

讓我們說它是lib/array_method.rb

class Array 
    def all_empty? 
    ... 
    end 
end 

現在,在規格,你應該require這個

require `array_method` 

describe Array do 
    context "#all_empty?" do 
    it "returns true if all elements of the Array are empty" do 
     expect(["", "", ""].all_empty?).to be_truthy 
    end 
    end 
end 

spec_helper.rb

require `array_method` 

然後

您的規範代碼

require "spec_helper" 

describe Array do 
    context "#all_empty?" do 
    it "returns true if all elements of the Array are empty" do 
     expect(["", "", ""].all_empty?).to be_truthy 
    end 
    end 
end