我的Rails API應用程序有兩個資源:文章(父級)和註釋(子級)。我想測試一下,當創建父項時,如果指定了任何子項,也會創建。所以我想測試這個創建INSIDE父級的創建控制器測試,除了孩子的創建控制器測試本身。用於測試的Rspec測試在父資源內部創建嵌套資源的控制器
我已經得到了JSON請求的工作很好,但我不知道如何構建我的RSpec的測試
{
"article": {
"original_language": "ja",
"title": "日本のコンビニが中東で初めて店を開く",
"body": "コンビニの會社「セブン-イレブン・ジャパン」は13日、中東のUAE=アラブ首長國連邦のドバイに新しい店を開きました。日本のコンビニが中東に店を開くのは初めてです。\nUAEには24時間開いている店がほとんどありませんでした。このため、UAEの中のアブダビ首長國の王族(=王と王の親類)が新しいやり方の店を開いてほしいと頼んでいました。\n新しい店では、特に弁當やおにぎりなどを売りたいと考えています。UAEの人が好きなインドのスパイスを入れたり、大きなソーセージをのせたりしたおにぎりも作りました。新しい店の社長は「UAEにはいろいろな國の人たちが來ています。お客様がみんな喜ぶような店にしたいです」と話していました。\nセブン-イレブン・ジャパンは、これから3年でUAEに100の店を開く予定です。",
"source_name": "NHK Easy News",
"source_url": "http://www3.nhk.or.jp/news/easy/k10010269131000/k10010269131000.html",
"privacy_status": 1,
"scheduled_date": null,
"level": 3,
"annotations": [
{
"destination_language": "en",
"authority_level": 1,
"source_text": "コンビニ",
"location_start": 1,
"location_end": 5,
"category": 0,
"definition": "Convenience Store",
"reading": null,
"translation": null,
"usage_note": "Convenience stores are everywhere in Japan. Most open 24/7. The big chains are 7/11, Lawson, Family Mart, Sunkus, and Circle K.",
"specific_note": null,
"paragraph_id": 1
},
{
"destination_language": "en",
"authority_level": 1,
"source_text": "コンビニ",
"location_start": 1,
"location_end": 5,
"category": 0,
"definition": "Convenience Store",
"reading": null,
"translation": null,
"usage_note": "Convenience stores are everywhere in Japan. Most open 24/7. The big chains are 7/11, Lawson, Family Mart, Sunkus, and Circle K.",
"specific_note": null }
]
}
}
這是迄今爲止我嘗試。我意識到我正在做的不是在JSON文章中嵌套註釋。我怎樣才能做到這一點?
@article_attributes = create_prospective(scope: :article)
@annotation_attributes_valid = create_prospective(scope: :annotation)
@annotation_attributes_invalid = create_prospective(scope: :annotation, trait: :invalid)
post :create, {user: @user.id, article: @article_attributes, annotations: @annotation_attributes_valid }, format: :json
注:create_prospective是FactoryGirl
控制器的輔助方法
def create
@article = current_resource_owner.articles.build(article_params)
if @article.save
annotation_result = create_annotation(@article, params[:article][:annotations])
render json: {article: @article, total_number_annotations: annotation_result[:total_count], number_annotations_succeeded: annotation_result[:success_count], number_annotations_failed: annotation_result[:failure_count], successful_annotations: annotation_result[:success_list], failed_annotations: annotation_result[:failure_list]}, status: annotation_result[:api_status]
# end
else
render json: { errors: @article.errors }, status: 422
end
末
注:create_annotation是節省了註釋的關注,在這兩種可重複使用文章控制器和註釋控制器
謝謝。這像一個魅力。我的create_prospective助手基本上是相同的attributes_for,所以部分不是問題。但你提到的嵌套是缺失的部分。謝謝! –