使用 Rspec/Capybara 进行 RSpec 测试。
假设我们有带有基本 CRUD 的 PostsController。测试什么?创建新帖子(#new),显示所有帖子(#index),销毁帖子(#destroy)等,如下面的代码,或以其他方式It allows user to create new post; when posts doesnt't exist it renders 404 ...; when user is blocked render 403
:
require 'spec_helper'
feature 'Post management', js: true do
background { login_user }
given!(:project) { create(:project) }
scenario 'creating new post' do
expect do
visit new_project_post_path(project)
fill_in 'post_title', with: 'Hello, I am the Doctor'
fill_in 'post_text', with: 'Trust me.'
click_button 'Add post'
end.to change(Post, :count).by(1)
end
given!(:project) { create(:project_with_posts) }
scenario 'listing posts' do
visit project_posts_path(project)
project.posts.each do |post|
page.should have_content post.title
end
end
given!(:post) { create(:post) }
scenario 'showing posts' do
visit project_post_path(post.project, post)
page.should have_content post.title
page.should have_content post.text
end
end