2013-05-31 1 views
1

Возможно, я пропустил это где-то, но как я могу проверить, что метод, который принимает аргумент, использует значение по умолчанию, если аргумент не указан?Rspec проверяет, что метод имеет значение по умолчанию для аргумента

Пример

# this method shouldn't error out 
# if `Post.page_results` without a parameter 
class Post 
    def self.page_results(page=1) 
    page_size = 10 
    start = (page - 1) * page_size 
    finish = start + page_size 
    return Page.all[start..finish] 
    end 
end 

ответ

-1
describe Post do 
    describe '#page_results' do 
    let(:post) { create :post } 

    context 'without arguments' do 
     it { post.page_results.should eq 1 } 
    end 
    end 
end 

create :post утверждение, как вы могли бы сделать это с FactoryGirl. Но вы могли бы, конечно, издеваться над своей моделью.

Update

describe Post do 
    describe '#page_results' do 

    context 'without arguments' do 
     it { Post.page_results.should eq 1 } 
    end 

    context 'with arguments' do 
     it { Post.page_results('foo').should eq 'bar' } 
    end 
    end 
end 
+1

Это не совсем правильно. Я хочу проверить, что значение 'page' равно 1, если аргумент не указан в результатах. Кроме того, 'page_results' - метод класса. Извините за это, обновив вопрос. – mehulkar

+0

Вы можете просто проверить, что метод возвращает с аргументами и без. Обновлен мой ответ. – Arjan

+0

Но кто говорит, что метод возвращает значение, которое вы хотите проверить? – asymmetric

0

Я использую before_validation для установки по умолчанию, например

before_validation do 
     self.some_attribute ||=a_default_value 
end 

Это оставляет открытой возможность изменить настройки по умолчанию

SomeClassWithDefaultAttributes.create(some_attribute:a_non_default_value) 

Имейте в виду, что если # before_validation возвращает false, затем th e validation failed