2015-06-04 4 views
0

У меня есть приложение Sinatra, унаследованное от Sinatra::Base класс. В этом приложении у меня есть один вспомогательный метод, который я использую перед фильтром. Как издеваться над таким методом в тестах с помощью миниатюрной макетной библиотеки?Minitest mocking Sinatra app

before do 
    unless valid_signature? 
    halt 401 
    end 
end 

ответ

0

Для того, чтобы быть valid_signature? вспомогательный метод Синатра, он должен быть частью модуля. Таким образом, предполагается, что ваш модуль является MyModule

module MyModule 
    def valid_signature? 
    end 
end 

Мы можем издеваться valid_signature? используя MiniTest следующим образом:

MyModule.stub :valid_signature?, "stub return value" do 
    # method is stubbed only in this block, so run tests from here 
    # make sure your module was defined before you stub it. 
end 

Если запуск ваших тестов внутри блок-слишком ограничивающими, я бы рекомендовал смотреть на Mocha stubbing and mock library или просто вручную переопределяя метод во время выполнения самостоятельно в тестовом файле:

MyModule 
    def valid_signature? 
    # you can only redefine after class has already been defined. 
    "stub return value" 
    end 
end 
+0

К сожалению, это не сработало. Я получаю "неопределенный метод' valid_signature? Для MyModule ". Переключение на мокко - это не вариант, я думаю - в этом проекте уже довольно много тестов с использованием minitest. – Sebastian

+0

Вы действительно заменили MyModule своим фактическим именем модуля? Вы также должны убедиться, что ваш модуль был необходим в первую очередь. –

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