【问题标题】:Rspec error: location has already been takenRspec 错误:位置已被占用
【发布时间】:2017-10-27 15:08:19
【问题描述】:

我在 rspec 中有以下测试用例

  let(:detail) { FactoryGirl.create(:detail) }

    let(:url) do
      "/detail/#{detail.detail_id}"\
      "/user/#{detail.user.id}/details"
    end
    let(:location_header) do
      detail_url(detail_id: detail.detail_id,
                  user: detail.user.id, location: detail.location)
    end

    before do
      post url, params: params
    end
    context 'when valid location and value are passed, detail is created successfully.' do
      let(:params) {{detail_app_id: detail.detail_app_id, location: detail.location, value: 'value'}}
        it { expect(response.status).to eq(201) }
    end

我正在学习 ruby​​ rspec,但出现错误“{\"error\":\"Validation failed: location has already been taken\"}"

当我在参数中更改位置值时,它会通过,但由于我正在为它创建工厂女孩,我想使用该值而不是传递不同的值。 知道为什么我会收到这个错误吗?

【问题讨论】:

  • 请编辑您的答案以显示整个工厂文件。

标签: ruby ruby-on-rails-4 rspec


【解决方案1】:

你需要进入你的一个工厂(我假设是细节)并正确分配它的位置(factories/detail.rb)。

这里发生的情况是您正在尝试创建一个新的详细信息,它会尝试保存该详细信息,但验证失败(我假设您在详细信息模型上有一个唯一的位置验证)

查看序列部分http://www.rubydoc.info/gems/factory_bot/file/GETTING_STARTED.md,了解如何在需要时提供唯一属性。

【讨论】:

  • 是的,我有唯一的位置索引,我在工厂女孩中有` location { Faker::Lorem.paragraph }`。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多