2011-12-30 2 views
1

Пожалуйста, простите моих корнишоныВключить модуль в RSpec

Given I have a module called Hello 
And it has a method called world and a class called World 
When I include the module in an RSpec spec 
And I call the method world 
Then it returns "hello world from method" 
But when I create a World class 
Then I get NameError: uninitialized constant World 

module Hello 
    def world 
    p "hello world from method" 
    end 
    class World 
    def initialize 
     p "hello world from class" 
    end 
    end 
end 

describe "hello world" do 
    include Hello 
    it "call method" do 
    world 
    end 

    it "call class" do 
    World.new 
    end 
end 
+0

Я думаю, что так, как вы указали Ваш вопрос (на основании того, что один ответчик не понимает этого.) – r00k

ответ

1

Простите мой Огурец, и если вы не предназначены что-то другое (как это не ясно)

When I create a Hello::World class 
Then I get an object of kind Hello::World 

it "should not catch fire on instantiation" do 
    Hello::World.new.should_not be_nil 
end 
+0

Нет, моя точка зрения заключалась в том, что я не могу назвать World.new, хотя я включил Hello в мою спецификацию. Я бы подумал, в том числе, что модуль сделал бы класс Hello доступным. –

+3

'include' будет добавлять только в методы экземпляра, определенные в модуле, тогда как' World.new' вызывает метод, определенный в классе в пространстве имен, заданном модулем. Если вам действительно нужен вспомогательный метод для создания экземпляра, то что-то вроде 'def new; World.new; end' в модуле Hello должен работать (но сбивать с толку, я бы назвал его «world_creator» или что-то в этом роде. Когда дело доходит до вызова вещей в пространствах имен, я все равно использую все пространство имен, поскольку оно сокращает количество ошибок (или беспокойство о причинах ошибок! :) – iain

Смежные вопросы