スーパーのモジュールのこの小さな部分をテストするにはどうすればよいですか?RSpecモックまたはスタブをモデルにスーパー
module ApiDoc
def post(path, parameters = nil, headers = nil)
super
document_request("post", path, parameters, headers) if ENV['API_DOC'] == "true"
end
...
end
私はそれがActionDispatchを実行したくない::統合 - :モジュールはポストを傍受する仕様/要求に含まれている(スーパークラスは... action_dispatch-3.0.1テスト/統合です)何でも、私はそれをテストするためにhow to mock or stub super
を知らない。
モジュールは仕様内でのみ使用され、100%のテストカバレッジを持つため、このようなメトリックは役に立たないと証明されます。私はそれをユニットテストする必要があります。
例は、必要であれば、これは私がApiDockだけなので
require 'spec_helper'
describe "Products API" do
include ApiDoc ############## <---- This is my module
context "POST product" do
before do
@hash = {:product => {:name => "Test Name 1", :description => "Some data for testing"}}
end
it "can be done with JSON" do
valid_json = @hash.to_json
############### the following 'post' is overriden by ApiDoc
post("/products.json",valid_json,
{"CONTENT_TYPE" => "application/json",
"HTTP_AUTHORIZATION" => ActionController::HttpAuthentication::Basic.encode_credentials("user", "secret")})
response.should be_success
end
end
end
ありがとうございます!私はmochaを使っているので、これはうまくいきます: 'ActionDispatch :: Integration :: Session.any_instance.expects(:post).with xx'ですが、私はApiDoc.postまたは-.document_requestをモックできません。そのクラス(ApiDocの)は 'RSpec :: Core :: ExampleGroup :: Nested_1'ですこの場合、これらのメソッドをどうやって模倣するのですか?または、その動作をテストするために、ダミーのクラスを作成してそれをインクルードするのですか? – oma
ダミークラスを作成する方が良い選択肢だと思います。 –
最初のコード行のために受け入れられた答え。ダミークラスのユニットテストは良い考えです。 FYIでは、 'super'を使用する方がエイリアスメソッドチェーンよりも優先されます。これらのエイリアスは、レール2.xを3にリファクタリングするときに、このようなエイリアスをたくさん削除しました。 – oma