API请求规范与请求规范

时间:2019-07-04 14:57:13

标签: ruby-on-rails rspec integration-testing rspec-rails

我是一名正在通过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

我们不能只进行一项集成测试或要求规格吗?

1 个答案:

答案 0 :(得分:1)

这些测试不同的端点(api_projects_pathprojects_path)并具有不同的授权方法。

即使测试(此处的“测试”是针对各个测试,也称为it块)或看起来几乎相同-从长远来看,它们可能会有所不同。对于API来说,保持行为很重要。 至于文件的组织-确保将它们放在单个文件中并共享一些通用设置(遵循DRY原理)。

但是,另一方面-为了获得更好的api分离和稳定性,可以接受一些复制粘贴编程-这样,将来在对非api路径进行一些更改时,您不太可能会无意中更改api测试。