)APIs on Railsの本を守っています。私は第8章にあります.RSpec 3.6でテストしている間、私は以前には得られなかったエラーを受けています。私はgit checkout
がこれらのテストが合格したコミットになってもそれらを取得しています。私は、Rails 5.1.3でこの本を読むことについて、私がブログ記事を書いているので、彼らがそうだったと確信しています。私は、第8章の終わりにテストスイート全体を実行することで、彼らが通過していないことを発見しました(失敗する仕様は第7章と第6章から来ています)。私は特定のファイルのためにほとんどの仕様を実行する前に。コミット後にもRSpecテストに失敗しました(
だから私はこの問題はシステム依存することができると思ったが、私はアプリの外の端末でやっていた唯一のものだった:
$ swapoff -a
$ swapon -a
、多分sudo apt-get update
だから私はバインドでいます今。
ERROR:
このエラーの場合のテストは#index
作用
products_controller_spec.rbにGET要求の後6を取得している間FactoryGirl
製品の4つのインスタンスを作成することである。
require 'rails_helper'
RSpec.describe Api::V1::ProductsController, type: :controller do
...
describe "GET #index" do
before(:each) do
4.times { FactoryGirl.create :product }
end
context "when is not receiving any product_ids parameter" do
before(:each) do
get :index
end
it "returns 4 records from the database" do
products_response = json_response[:products]
expect(products_response).to have(4).items
end
...
end
...
end
...
end
エラーメッセージ:
Api::V1::ProductsController GET #index when is not receiving any product_ids parameter returns 4 records from the database
Failure/Error: expect(products_response).to have(4).items
expected 4 items, got 6
I puts products_response
がテストを失敗する前に、私はこれらの6つのレコードでJSONを得た場合:
[
{
"id": 1,
"title": "Audible Remote Amplifier",
"price": "100.0",
"published": false,
"user": {
"id": 1,
"email": "[email protected]",
"created_at": "2017-08-27T12:13:26.977Z",
"updated_at": "2017-08-27T12:13:26.977Z",
"auth_token": "KA1ugPyXzXsULh6rN6QX",
"product_ids": [
1
]
}
},
{
"id": 2,
# rest of attributes
},
{
"id": 3,
# rest of attributes
},
{
"id": 4,
# rest of attributes
}
},
{
"id": 5,
# rest of attributes
},
{
"id": 6,
# rest of attributes
}
]
TESTING MANUALLY:
私のアプリは仕事の罰金です。 api.mydomain.dev/products
を打っている間、私はrails console
に3つの製品を作成した後に素敵なJSONレスポンスを得た:(ところでここに含まれていない失敗スペックの残りの2つです)api.mydomain.dev/products?min_price=15&max_price=30
のようなURLでのparamsと
{
"products": [
{
"id": 1,
"title": "product",
"price": "3.3",
"published": false,
"user": {
"id": 1,
"email": "[email protected]",
"created_at": "2017-08-13T07:31:29.339Z",
"updated_at": "2017-08-27T13:09:06.948Z",
"auth_token": "HJLb-d4DpgxQDzkR1RDf",
"product_ids": [
1,
2
]
}
},
{
"id": 2,
# attrs of second product in json
},
{
"id": 3,
# attrs of third product in json
}
]
}
とも:
私はspec/models/product_spec.rbに4つのエラーがありますが、この質問を短く保つためにここには含めません。理由は同じで、このエラーは最も簡潔だと思います。
私はもっとコードを提供するかもしれませんが、githubリポジトリに公開しています。 app/models/product.rb又はapp/api/v1/products_controller.rb
要約:
をアプリが正常に動作して、手動でテスト中に予想される出力を提供することです。これらのテストが合格した場所にコミットした後でも、自動的にテストしている間にエラーが発生しました。これは問題がシステム側にあることを示唆している可能性があります。それがシステム側にない場合は、前に4つになっている間に余分な2つのオブジェクトを取得する理由は何ですか?問題はどこだ?
はい、そうです。それを素早くチェックするために、私はあなたが言ったように 'rails c test'に行きました、そして、これらの2つのレコードはそこにありました(方法は分かりません)。私は 'Product.destroy_all'によってそれらを破壊し、5つのテストはすべて再び成功しています。私はDatabaseCleanerのドキュメントを掘り起こす必要があるようです。ありがとうございました。 – ToTenMilan
うれしい私は助けることができます。乾杯。 –