では使用できません。 RSpec(3.5.0)、FactoryGirl(4.8.0)、DatabaseCleaner(1.5.3)、Mongoid(6.0.3)を使用しています。レール - FactoryGirlによって持続オブジェクトは、私は管理者の名前空間での私のコントローラのテストを書いていコントローラ
問題は、これらのテスト行為妙ということです。 GET index
リクエストをテストすると、FactoryGirlによって生成されたオブジェクトが正常に作成され、永続化されます。しかし、コントローラはそれらを見つけるように見えません。
私は、3つの異なるコントローラを持っています。 3人中2人がこの問題を抱え、3人目が魅力のように働きます。コードは同じです(命名を除いて)唯一の違いは、現用コントローラーのリソースがネストされていることです。
アクセサリーのための1つの作品:
describe "GET #index", get: true do
let (:accessory) { FactoryGirl.create(:accessory) }
before do
get :index, params: { category_id: accessory.category_id.to_s }, session: valid_session, format: :json
end
it "responses with OK status" do
expect(response).to have_http_status(:success)
end
it "responses with a non-empty Array" do
expect(json_body).to be_kind_of(Array)
expect(json_body.length).to eq(1)
end
it "responses with JSON containing accessory" do
expect(response.body).to be_json
expect(json_body.first.with_indifferent_access).to match({
id: accessory.to_param,
name: 'Test accessory',
description: 'This is an accessory',
car_model: 'xv',
model_year: '2013',
images: be_kind_of(Array),
category_id: accessory.category.to_param,
dealer_id: accessory.dealer.to_param,
url: be_kind_of(String)
})
end
end
とカテゴリに1つにはない:
describe "GET #index", get: true do
let (:category) { FactoryGirl.create(:category) }
before do
get :index, params: {}, session: valid_session, format: :json
end
it "responses with OK status" do
expect(response).to have_http_status(:success)
end
it "responses with a non-empty Array" do
expect(json_body).to be_kind_of(Array)
expect(json_body.length).to eq(1)
end
it "responses with JSON containing category" do
expect(response.body).to be_json
expect(json_body.first.with_indifferent_access).to match({
id: category.to_param,
name: 'Test category',
image: be_kind_of(String),
url: be_kind_of(String)
})
end
end
あなたがロジックを見ることができるように同じである:before
フックに要求を発行し、 let
を使用してオブジェクトを設定します。
別の奇妙なことは、同じロジックを持つカテゴリのGET show
テストは完璧に動作していることです。これらの質問に
(1、2)彼らはそれがDatabaseCleaner戦略によるものかもしれないし、1の代わりにtransaction
戦略のtruncation
を使用する必要がありますと言います。モンゴイエは、truncation
しか許していないので、私はそれをします。そして、私はまた、FactoryGirlとDatabaseCleanerためuse_transactional_fixtures = false
RSpecのコンフィグにJavaScript対応のテスト、具体的に語ったRSpecのを使用していない:
RSpec.configure do |config|
config.include FactoryGirl::Syntax::Methods
config.before(:suite) do
DatabaseCleaner.strategy = :truncation
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each, :js => true) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
私はこれらのテストは、要求を発行して、オブジェクトを作成することによって、合格作ることができていますそれぞれの例ではbefore
とlet
の代わりに使用します。しかし、私はそれが彼らと一緒に働くべきだと思います。
コントローラのインデックスメソッドはデフォルトです:
def index
@thing = Thing.all
end
あなたはこの奇妙な動作上の任意の考えを持っていますか?
右です。実践例で実際にオブジェクトを呼んでいることに気づいていないとは信じられません。ありがとう、@ザル! – mityakoval