Итак, у меня есть этот простой рубиновый класс:
class GetRequestList
def initialize(current_user, filter_hash)
@authorizer = RequestAuthorizer.new(current_user)
@filter = RequestFilter.new(filter_hash)
end
def generate
Request.send_chain(@authorizer.method_chain)
.send_chain(@filter.method_chain)
end
end
И я хочу проверить, что Request
получает два метода send_chain
отдельно от реализаций RequestAuthorizer
и RequestFilter
. Для этого я пытаюсь использовать некоторые заглушки:
require 'test_helper'
class GetRequestListTest < ActiveSupport::TestCase
test "request should be filtered by filter and role" do
Request.expects(:send_chain).twice.returns([build(:request)])
RequestFilter.stubs(:new)
RequestFilter.any_instance.stubs(:method_chain).returns([])
RequestAuthorizer.stubs(:new)
RequestAuthorizer.any_instance.stubs(:method_chain).returns([])
assert GetRequestList.new(:current_user, :filter).generate.size == 1
end
end
Вы видите, что не так. stubs(:new)
возвращает nil
, и в переменных экземпляра GetRequestList
нет экземпляров RequestAuthorizer
и RequestFilter
, и мы получаем ошибку. Я не могу понять, как заглушить методы для переменных экземпляра. Какие-либо предложения?