2

Я занимаюсь спецификацией контроллера в Rails 4, и я хочу проверить атрибуты записи, созданной действием контроллера. Как найти вновь созданную запись?Найти новую запись в контрольном тесте с использованием RSpec 3 и Rails 4

Например, что я мог сделать вместо

it 'Marks a new user as pending' do 
    post :create, params 
    # I don't want to use the following line 
    user = User.last 
    expect(user).to be_pending 
end 

The Rails guides только кратко рассказывает о тестах контроллера, где он упоминает, что тестирование Article.count изменяется на 1, но не как получить новую модель ActiveRecord.

Вопрос Find the newest record in Rails 3 о Rails 3.

Я неохотно используют User.last, потому что сортировка по умолчанию может быть нечто иное, чем дата создания.

ответ

1

Нецелесообразно сравнивать records или objects в тестах контроллера. В тесте контроллера create вы должны проверить правильность перенаправления и изменение записи.

Вы можете легко удалить свои объекты в модельном тесте, поскольку вы можете легко отслеживать свою запись.

Тем не менее, вы можете получить доступ к созданной записи из теста, если ваш action имеет variable, который держит record как

В контроллере

def create 
    @user = #assign user 
end 

В тесте

assigns(:user).name.should eq "Name" # If it has a name attribute 
assigns(:user).pending.should be_true # I don't know how you implemented pending 

Вы можете см. this article

+0

Что такое 'track' или' manage'? Что реализует эти методы? –

+0

Я имею в виду это для того, что вы можете назначить 'record' для' переменной', а затем можете работать с этой 'переменной', например. 'let (: user) {Fabricate.build: user}' now' user' будет доступен в вашем примере, и вы можете использовать 'user', например. 'ожидать (user.disabled?). be_true' –

+0

Я пробовал исправить грамматику вашего ответа. Неожиданно ли я изменил какой-либо смысл? Кроме того, с помощью «и проверки изменения записи», вы имеете в виду проверку того, изменилась ли отдельная запись или проверили, изменилось ли количество записей? –

2

Если контроллер имеет переменную экземпляра с именем @user, тогда мы можем получить к ней доступ в RSpec на assigns(:user).

+0

Я немного обеспокоен тем, что это нарушит инкапсуляцию. –

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