私はRspecを初めて使用しています。基本的な機能のコントローラメソッドをテストしようとしています。私は基本的な機能をテストするつもりはないと知っていますが、私は何かを構築するよりも学習目的のためにもっとやっています。Rspec投稿: 'unknown keyword:'を作成する
私はProtocolsControllerというコントローラを持っています。コントローラは、基本的なCRUD機能に使用されます。コントローラをテストして#メソッドを作成しようとしています。以下は私の#createコントローラです:
def create
@protocol = Protocol.new(protocol_params)
if @protocol.save
flash[:notice] = 'New protocol added'
redirect_back(fallback_location: 'test_results#index')
else
flash[:notice] = @protocol.errors[:name]
render 'new'
end
end
悲しいパスをテストするために、私は、コントローラにプロトコルクラスのインスタンスを作成するために必要なパラメータが含まれていますモックオブジェクトを渡したいです。これを行うために、私は次のコードを持っている:
describe '#create' do
it 'fails to save because the name already exists' do
params = FactoryGirl.attributes_for(:protocol)
post :create, :protocol => params
end
end
は今、私はテストが完了していないけど、私は、一度に1つのラインをテストしていると私はRSpecのを実行すると、私は次のエラーを取得する:
Failure/Error: post :create, :protocol => params
ArgumentError:
unknown keyword: protocol
しかし私は投稿を変更するとき:expect { post :create, :protocol => params }
それは働く。私の質問に私をもたらします:
- 最初の投稿(
post :create, :protocol => params
)はなぜ失敗しますか? - モックオブジェクトをコントローラに送信するにはどうすればよいですか?
- expectバージョンはなぜ機能しますか?
質問に対する洞察は非常に高く評価されます。私はこれを理解しようとしている私の頭を傷つけてきた、そして、私の推測はそれが明らかな答えだということです。
使用しているRSpecのバージョンは何ですか? –
最新バージョン - > 3.6 – Darkisa