我是一名测试新手,正在使用RSpec进行日常Rails测试。
基本上有两个请求规范文件-一个用于API:
# spec/requests/projects_api_spec.rb
describe 'Projects API', type: :request do
it 'creates a project' do
user = FactoryBot.create(:user)
project_attributes = FactoryBot.attributes_for(:project)
expect {
post api_projects_path, params: {
user_email: user.email,
user_token: user.authentication_token,
project: project_attributes
}
}.to change(user.projects, :count).by(1)
expect(response).to have_http_status(:success)
end
end另一种是控制器规格的替换:
# spec/requests/projects_spec.rb
RSpec.describe "Projects", type: :request do
context "as an authenticated user" do
before do
@user = FactoryBot.create(:user)
end
context "with valid attributes" do
it "adds a project" do
project_params = FactoryBot.attributes_for(:project)
sign_in @user
expect {
post projects_path, params: { project: project_params }
}.to change(@user.projects, :count).by(1)
end
end
end
end我们不能只有一个集成测试或请求规范吗?
发布于 2019-07-05 00:15:35
它们测试不同的端点(api_projects_path和projects_path),并具有不同的授权方法。
即使测试(这里的“测试”是针对单独的测试,也就是it块)看起来几乎是相同的--从长远来看,它们可能会有分歧。对于API来说,保留行为是很重要的。至于文件组织-当然,这些文件可以放在单个文件中,并共享一些常见的设置(遵循DRY原则)。
但另一方面-为了更好的api分离和稳定性,一些复制-粘贴-编程是可以接受的-这样您就不太可能在将来实现对非api路径的某些更改时无意中更改api测试。
https://stackoverflow.com/questions/56890486
复制相似问题