Rspecをテストして学習するのが初めてで、うまく動作しません。Rspec3コントローラでbelongs_toアソシエーションを使用してinstance_doubleを使用してテストする
(私は本Rspec3との効果的なテスト、および多くのチュートリアルを読んだことがある...またpluralsight.com)
状況は非常に簡単です。私はこの方法、company
モデルbelongs_to user
を作成し、これはコードであるデをテストしたいCompanies
コントローラで:expect(Company).to receive(:new).with(company_params)
またはコントローラで:
私はテストで
を実行するときに問題があると思います: @company.user=helpers.user
コントローラー:
class CompaniesController < SessionsController
def create
@company=Company.new(company_params)
@company.user=helpers.user
if @company.save()
redirect_to companies_path
else
render :edit
end
end
とRSpecの:
RSpec.describe CompaniesController, type: :controller do
let(:user) { instance_double(User) }
before do
allow_any_instance_of(ApplicationHelper).to receive(:user){user}
allow(controller).to receive(:authorize){true}
end
describe 'Authenticated user with companies' do
let(:company_params) { {company:{name:"Albert",domain:"www.albert.com"}} }
let(:company) { instance_double(Company) }
before do
allow(Company).to receive(:new){company}
end
describe 'POST #create' do
context "with valid data" do
before { allow(company).to receive(:save){true} }
it "redirects to companies_path" do
expect(Company).to receive(:new).with(company_params)
expect(company).to receive(:user=).with(user)
post :create, params:{company: company_params}
expect(response).to redirect_to(companies_path)
end
私の意図は非常に簡単です:二重のインスタンスを使用して...作成アクションをテストし、シミュレートするために、使用して模擬するinstance_double(またはスタブ)@company、およびCompany.new「セーブ()」真...など
を返す私はinstance_double、モックのANSスタブを使用してテストする方法を、私は非常によく自分自身を説明する場合は知っているが、controlloerのcreate
アクションを与え、ないのですか?
おかげで、すべての
感謝を許可します私は将来のテストのためにそれを念頭に置いていきます。とにかくPluralsightコースに続いて、私はCreateメソッドのすべてのメソッドをスタブする方法を見てきましたが、Active Recordではなく単純なオブジェクトです。スタブする方法を知りたいです。 '@ company.user ='と 'xxx = Company.new(company_params) '...' allow'と 'expect'を使って...この関連付けをスタブすることは可能ですか?クラッシュなしで作業するための私のコードはどのようにすべきですか?再度、感謝します –