タグ付けされた質問 「rspec」

RSpecは、Rubyプログラミング言語用のビヘイビア駆動開発(BDD)フレームワークであり、JBehaveに触発されました。JMockに基づく独自の完全に統合されたモッキングフレームワークが含まれています。フレームワークはドメイン固有言語(DSL)と考えることができ、自然言語仕様に似ています。

6
適切なエラーメッセージでCapybaraを使用して要素の数をアサートする方法は?
カピバラでは、次のようなことができることを知っています。 page.should have_css("ol li", :count => 2) ただし、たとえばページに一致する要素が1つしかない場合、エラーはあまり説明的ではありません。 1) initial page load shows greetings Failure/Error: page.should have_css("ol li", :count => 2) expected css "ol li" to return something このかなりあいまいなエラーメッセージの代わりに、エラー出力が「「ol li」と一致する場合、期待される:2、見つかった:1」のようになるようにアサーションを記述する方法はありますか。明らかに、私はそのような振る舞いのために自分でカスタムロジックを作ることができました-私はこれを「箱から出して」行う方法があるかどうか尋ねていますか? その価値のために、私はSeleniumドライバーとRSpecを使用しています。
86 rspec  dsl  capybara 

4
RSpec:複数の変更を期待
機能仕様でフォームを送信するときに、モデルの多くの変更を確認したいと思います。たとえば、ユーザー名がXからYに変更され、暗号化されたパスワードが任意の値で変更されたことを確認したいと思います。 それについてはすでにいくつか質問があることは知っていますが、私にふさわしい答えは見つかりませんでした。最も正確な答えは、ChangeMultipleここでMichael Johnstonによるマッチャーのようです:RSpecが2つのテーブルの変更を期待することは可能ですか?。その欠点は、既知の値から既知の値への明示的な変更のみをチェックすることです。 より良いマッチャーがどのように見えるかについて、いくつかの擬似コードを作成しました。 expect { click_button 'Save' }.to change_multiple { @user.reload }.with_expectations( name: {from: 'donald', to: 'gustav'}, updated_at: {by: 4}, great_field: {by_at_leaset: 23}, encrypted_password: true, # Must change created_at: false, # Must not change some_other_field: nil # Doesn't matter, but want to denote here that this field exists ) …

3
RSpecの件名とletの違いは何ですか?いつ使用すべきかどうか?
http://betterspecs.org/#subjectには、とに関する情報がsubjectありletます。しかし、私はそれらの違いについてはまだはっきりしていません。さらに、SOの投稿RSpecテストでbefore、let、subjectを使用することに反対する議論は何ですか?subjectまたはを使用しない方が良いと述べましたlet。どこに行こうか?私はとても混乱しています。

5
リクエスト仕様でのスタブ認証
リクエストスペックを作成するとき、セッションやスタブコントローラーメソッドをどのように設定しますか?統合テストで認証をスタブアウトしようとしています-rspec / requests これがテストの例です require File.dirname(__FILE__) + '/../spec_helper' require File.dirname(__FILE__) + '/authentication_helpers' describe "Messages" do include AuthenticationHelpers describe "GET admin/messages" do before(:each) do @current_user = Factory :super_admin login(@current_user) end it "displays received messages" do sender = Factory :jonas direct_message = Message.new(:sender_id => sender.id, :subject => "Message system.", :content => "content", …

3
Rails / RSpecで例外発生をテストする方法は?
次のコードがあります。 def index @car_types = car_brand.car_types end def car_brand CarBrand.find(params[:car_brand_id]) rescue ActiveRecord::RecordNotFound raise Errors::CarBrandNotFound.new end RSpecでテストしたいです。私のコードは: it 'raises CarBrandNotFound exception' do get :index, car_brand_id: 0 expect(response).to raise_error(Errors::CarBrandNotFound) end IDが0のCarBrandが存在しないため、コントローラーコードでErrors :: CarBrandNotFoundが発生しますが、テストコードで何も発生しなかったことがわかります。どうすれば修正できますか?何が間違っていますか?


6
rake specを実行せずにRailsrspecテスト用のテストデータベースを準備するにはどうすればよいですか?
重要なトラブルシューティングの後、rake specrspecを直接実行する前に(たとえば、スペックのサブセットで)、一度実行する必要があることがわかりました(control-cで中止できます)。Rails3.0.7とRSpec2.5.0を実行しています。 明らかに、rakeはいくつかの重要なデータベースセットアップタスク/コードを実行しています(ルートレベルのレールRakefileやその他の場所にカスタムコードがあります)。 実行せずにraketestデータベースのセットアップタスク/コードを実行するにはどうすればよいrake specですか? ファイルのサブセットでrspecを実行できることに加えて、specjourを使用してスペックを複数のコアに分散しています(LAN全体にスペックを分散することはまだ成功していません)が、rspecを実行する場合と同じ動作が見られます直接:rake specspecjourが機能する前に、各テストデータベースで実行する必要があります(2つのコアを想定): rake spec TEST_ENV_NUMBER=1 control-c (after tests start) rake spec TEST_ENV_NUMBER=2 control-c (after tests start) specjour 注:私のconfig / database.ymlには、テスト用にこのエントリがあります(並列テストgemで一般的です)。 test: adapter: postgresql encoding: unicode database: test<%=ENV['TEST_ENV_NUMBER']%> username: user password: parallel_testsはデータベースを正しく設定しているようですが、仕様の多くは失敗しています。 また、実行するspecjour prepareと、Postgresがデータベースを見つけることができないというエラーをログに記録しますが、データベースは作成されます(テーブルなし)。その後の実行では、エラーはログに記録されませんが、テーブルも作成されません。私の問題全体が単なるバグである可能性があるprepareので、githubで報告しました。 Specjour::Configuration.prepare.specjour / hooks.rbに設定することで、各specjourテストデータベースで任意のコードを実行できると思います。そのため、実行する必要のあるrakeタスクやその他のコードがあれば、そこで機能する可能性があります。

8
一部のJSが実行された後、Capybaraに可視性をチェックさせる方法は?
ページをロードした後、xhrによって返されたデータに基づいてさまざまなアイテムを実行および非表示および表示するコードがあります。 私の統合テストは次のようになります。 it "should not show the blah" do page.find('#blah').visible?.should be_true end このテストが実行されるコンテキストで手動でページに移動すると、期待どおりに#blahが表示されません。Capybaraがページの初期状態(この場合は非表示)を調べて、DOMの状態を評価し、JSが実行される前にテストに失敗しているのではないかと思います。 はい、:js => true含まれているdescribeブロックにを設定しました:) どんなアイデアでも大歓迎です!ここに意図的な遅延を入れる必要がないことを願っています。それは不安定に感じ、物事を遅くします。

5
Rspec3フラッシュメッセージをテストする方法
rspecでコントローラーのアクションとフラッシュメッセージの存在をテストしたい。 アクション: def create user = Users::User.find_by_email(params[:email]) if user user.send_reset_password_instructions flash[:success] = "Reset password instructions have been sent to #{user.email}." else flash[:alert] = "Can't find user with this email: #{params[:email]}" end redirect_to root_path end スペック: describe "#create" do it "sends reset password instructions if user exists" do post :create, email: …

5
factory_botで配列/ハッシュを定義する方法は?
ネストされたハッシュを使用して、配列内のデータを返すDropboxのRESTサービスからのいくつかの戻り値をシミュレートするテストを作成しようとしています。 返される結果は内部にhasがある配列であるため、ファクトリのコーディング方法を理解するのに問題があります。ここに何が行きますか? Factory.define :dropbox_hash do ?? end Dropboxのデータは次のようになります。 ["/home", {"revision"=>48, "rev"=>"30054214dc", "thumb_exists"=>false, "bytes"=>0, "modified"=>"Thu, 29 Dec 2011 01:53:26 +0000", "path"=>"/Home", "is_dir"=>true, "icon"=>"folder_app", "root"=>"app_folder", "size"=>"0 bytes"}] そして、RSpecでこのようなファクトリコールが欲しいのですが: Factory.create(:dropbox_hash)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.