我在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\"}"
当我更改params中的位置值时,它会通过但是因为我正在为它创建工厂女孩,所以我想使用该值而不是传递不同的值。 知道我为什么会收到这个错误吗?
答案 0 :(得分:0)
你需要进入你的一个工厂(我假设细节)并正确分配它的位置(factory / detail.rb)。
这里发生的是您尝试创建一个新细节,它试图保存,但验证失败(我假设您对细节进行了唯一的位置验证)模型)
查看序列部分http://www.rubydoc.info/gems/factory_bot/file/GETTING_STARTED.md,了解如何在需要时提供唯一属性。