我是一名正在通过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
我们不能只进行一项集成测试或要求规格吗?
答案 0 :(得分:1)
这些测试不同的端点(api_projects_path
和projects_path
)并具有不同的授权方法。
即使测试(此处的“测试”是针对各个测试,也称为it
块)或看起来几乎相同-从长远来看,它们可能会有所不同。对于API来说,保持行为很重要。
至于文件的组织-确保将它们放在单个文件中并共享一些通用设置(遵循DRY原理)。
但是,另一方面-为了获得更好的api分离和稳定性,可以接受一些复制粘贴编程-这样,将来在对非api路径进行一些更改时,您不太可能会无意中更改api测试。