jef*_*ale 17 rspec ruby-on-rails
如何编写规范以检查用户注册成功后是否在数据库中创建了新记录?在raails 4中使用rspec与capybara,factorygirl和database_cleaner gems.
我觉得这种情况很常见,答案应该很容易找到,但我无法在这里或通过谷歌找到.
Tar*_*ast 31
您可能想要更改匹配器
您将执行以下操作:
expect {
post :create, :user => {:user => :attributes }
}.to change { User.count }
Run Code Online (Sandbox Code Playgroud)
注意:这个匹配器的问题是这两个地方确实是大括号!
这段代码说:
期望运行第一个代码块来改变我运行该代码块时得到的值
并且在功能上等同于写作:
before_count = User.count
post :create, :user => {:user => :attributes }
expect(User.count).not_to eq(before_count)
Run Code Online (Sandbox Code Playgroud)
Moh*_*ady 10
既然你提到了水豚,所以我假设你想要一个功能规格,当然你需要更改细节以匹配你的应用程序
require 'rails_helper'
feature 'Users' do # or whatever
scenario 'creating an account' do
visit root_path
click_link 'Sign Up'
fill_in 'Name', with: 'User 1'
fill_in 'Email', with: 'email@domain.com'
fill_in 'Password', with: 'password'
expect{
click_button 'Sign up'
}.to change(User, :count).by(1)
end
end
Run Code Online (Sandbox Code Playgroud)
当您使用factorygirl时,您可以使用factorygirl来创建测试数据
FactoryGirl.define do
factory :user do
sequence(:name) { |n| "user #{n}" }
sequence(:email) { |n| "sampleuser+#{n}@sampleuser.com" }
password '123456789'
end end
Run Code Online (Sandbox Code Playgroud)
您可以在需要用户记录时使用"FactoryGirl.create(:user)".
要测试你可以写这样的规格
expect{
post :create, {user: FactoryGirl.attributes_for(:user)}
}.to change(User, :count).by(1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15012 次 |
| 最近记录: |