問題タブ [rspec]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - Rails で RSpec を使用してスイーパーをテストする
スイーパーが適切に呼び出されていることを確認したいので、次のようなものを追加してみました。
しかし、私はただ得ます:
テスト構成でキャッシュをオンにしようとしましたが、違いはありませんでした。
ruby-on-rails - Rspec のグローバル before(:all) で HTTP_REFERER を設定する
追加を避けるために
作成するすべての controller_spec ファイルの before ブロックに、これをグローバル構成 (spec_helper.rb) に追加しようとしました
問題は、次のエラーが表示されることです。
これを正しく実装する方法についての指針はありますか?
乾杯!
ruby - RSpecとOpen-URISocketError/TimeoutErrorをモックアップするにはどうすればよいですか
Open-Uri open()がタイムアウトを呼び出すか、SocketErrorなどの例外を発生させると、期待どおりに処理していることを確認できるようにしたいと思いますが、これに問題があります。
これが私の仕様です(SocketErrorの場合):
そして、open-uriを使用しているオブジェクトの部分:
ただし、この状況では、仕様はnil.read
エラーと同様に失敗します。
open()
今週、この問題に遭遇したのは2回目です。前回、でラップするときにTimeoutErrorをシミュレートしようとしたときtimeout() {}
に、あきらめて、クラスを開くことで実際のタイムアウトが発生しました。無効なURLを呼び出そうとすると、明らかにこれがSocketErrorをスローする可能性がありますが、RSpecを使用してこれをモックアウトする正しい方法があると確信しています。
更新:私は明らかに、深夜にエラーが発生したのは、SocketErrorの後にURLを再試行したときであり、and_raise(SocketError)部分が正常に機能したことを明確に考えていませんでした。
ruby-on-rails - Railsでテストするためにデフォルトの「www.example.com」ドメインを変更するにはどうすればよいですか?
アクセスするドメインに応じて異なる動作をする Rails アプリケーションがあります (たとえば、www.myapp.com は user.myapp.com に対して異なる方法で呼び出します)。本番環境ではこれで問題なく動作しますが、私のテスト コードでは常に "www.example.com" のホスト名が表示されます。
アクセスするふりをしているホスト名をテストに指定させる明確な方法はありますか?
ruby-on-rails - Ruby Object#idの警告とActive Record
仕様を実行すると、次のような警告が表示され続けます。
Object#idは非推奨になります。Object#object_idを使用します
問題のコードは、ActiveRecordモデルのIDにアクセスしています(これは、Ruby VMのオブジェクトインスタンスIDではなく、明らかにテーブルの属性です)。
これらの特定の警告をオフにする方法、または何らかの方法でそれらを回避する方法を知っている人はいますか?
ruby - テストデータをランダムに生成するのは悪い習慣ですか?
rspec を使い始めて以来、フィクスチャの概念に問題がありました。私の主な懸念事項は次のとおりです。
テストを使用して、驚くべき動作を明らかにします。私は、テストしている例について考えられるすべてのエッジ ケースを列挙できるほど賢いわけではありません。ハードコードされたフィクスチャの使用は、私が想像した非常に特殊なケースでコードをテストするだけなので、制限があるようです。(確かに、どのケースをテストするかに関しては、私の想像力にも限界があります。)
コードのドキュメントの形式としてテストを使用します。ハードコーディングされたフィクスチャ値がある場合、特定のテストが何を実証しようとしているのかを明らかにするのは困難です。例えば:
最初の方法を使用すると、最も高価なアイテムが何であるかが読者に示されず、その価格が 100 であることがわかります。3 つの方法はいずれも、そのフィクスチャ
:expensive
が にリストされている最も高価なものであると信じるよう読者に求めますfixtures/items.yml
。Item
不注意なプログラマーは、 inを作成before(:all)
したり、別のフィクスチャを に挿入したりして、テストを中断する可能性がありfixtures/items.yml
ます。それが大きなファイルである場合、問題の原因を突き止めるのに長い時間がかかる可能性があります。
私が始めたことの 1 つは、#generate_random
すべてのモデルにメソッドを追加することです。このメソッドは、スペックを実行しているときにのみ使用できます。例えば:
(これを行う方法の具体的な詳細は、実際にはもう少しクリーンです。すべてのモデルの生成とクリーンアップを処理するクラスがありますが、このコードは私の例では十分に明確です。)したがって、上記の例では、次のようにテストできます。続きます。心のフェイントへの警告: 私のコードは次の使用に大きく依存していますbefore(:all)
:
このようにして、私のテストは驚くべき動作をよりよく明らかにします。この方法でデータを生成すると、コードが予期したとおりに動作しないエッジ ケースに出くわすことがありますが、フィクスチャのみを使用していた場合はキャッチできなかったでしょう。たとえば、 の#most_expensive
場合、複数のアイテムが最も高価な価格を共有するという特別なケースを処理するのを忘れると、最初の でテストが失敗することがありましたshould
。AutoSpec で非決定論的な失敗を見ると、何かが間違っているという手がかりが得られます。フィクスチャだけを使用していた場合、そのようなバグを発見するのにさらに時間がかかる可能性があります。
また、私のテストでは、予想される動作がどのようなものかをコードで示すという、わずかに優れた仕事もしています。私のテストでは、sorted が価格の降順で並べ替えられたアイテムの配列であることが明らかになりました。その配列の最初の要素と等しいと予想#most_expensive
しているので、 の予想される動作がさらに明確になりmost_expensive
ます。
それで、これは悪い習慣ですか?固定具に対する私の恐怖は不合理なものですか? モデルごとにメソッドを書くのはgenerate_random
大変ですか? または、これは機能しますか?
ruby - RSpecGemは依存関係をインストールしていないようです
$> jruby -v
jruby 1.1.4(ruby 1.8.6パッチレベル114)(2008-08-28 rev 7570)[x86-java]
$> gem install rspec
JRubyリミテッドオープンがロードされました。gem install jruby-opensslを使用すると、完全にサポートされます。
http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL
正常にインストールされたrspec-1.1.121gemがインストールされまし
たrspec-1.1.12
のriドキュメントをインストールしています...rspec-1.1.12
のRDocドキュメントをインストールしています...
$> spec --help
... / jruby / 1.1.4 / lib / ruby / site_ruby / 1.8 / rubygems.rb:578:in `report_activate_error':RubyGemキュウリが見つかりませんでした(> = 0.1.13)(Gem :: LoadError)
from ... / jruby / 1.1.4 / lib / ruby / site_ruby / 1.8 / rubygems.rb:134:in activate'from
... / jruby / 1.1.4 / lib / ruby / site_ruby / 1.8 / rubygems.rb :157:in
from ... / jruby / 1.1.4 / lib / ruby / site_ruby / 1.8 / rubygems.rb:157:in gem'from
... / jruby / 1.1.4 / bin / spec:18activate'
from .../jruby/1.1.4/lib/ruby/site_ruby/1.8/rubygems.rb:158: ineach
activate'
from .../jruby/1.1.4/lib/ruby/site_ruby/1.8/rubygems.rb:49: in
$>gemインストールキュウリ
(インストールされたキュウリ-0.1.16および依存関係の用語-ansicolor-1.0.3、polyglot-0.2.5、treettop-1.2.4、diff-lcs-1.1.2)
$> spec --help
... / jruby / 1.1.4 / lib / ruby / site_ruby / 1.8 / rubygems.rb:578:in `report_activate_error':RubyGem hoeが見つかりませんでした(> = 1.8.0)(Gem :: LoadError)
from ... / jruby / 1.1.4 / lib / ruby / site_ruby / 1.8 / rubygems.rb:134:in activate'from
... / jruby / 1.1.4 / lib / ruby / site_ruby / 1.8 / rubygems.rb :157:in activate'from
... / jruby / 1.1.4 / lib / ruby / site_ruby / 1.8 / rubygems.rb:158:in each'
from ... / jruby / 1.1.4 / lib / ruby / site_ruby /1.8/rubygems.rb:157:in activate'from
... / jruby / 1.1.4 / lib / ruby / site_ruby / 1.8 / rubygems.rb:157:in activate'
from ... / jruby / 1.1.4 /lib/ruby/site_ruby/1.8/rubygems.rb:158:in each'from
... / jruby / 1.1.4 / lib / ruby / site_ruby / 1.8 / rubygems.rb:157:in gem' from
.. .. /jruby/1.1.4/bin/spec:18 activate'
from .../jruby/1.1.4/lib/ruby/site_ruby/1.8/rubygems.rb:158: ineach'
from .../jruby/1.1.4/lib/ruby/site_ruby/1.8/rubygems.rb:157: inactivate'
from .../jruby/1.1.4/lib/ruby/site_ruby/1.8/rubygems.rb:157: inactivate'
from .../jruby/1.1.4/lib/ruby/site_ruby/1.8/rubygems.rb:158: ineach'
from .../jruby/1.1.4/lib/ruby/site_ruby/1.8/rubygems.rb:157: inactivate'
from .../jruby/1.1.4/lib/ruby/site_ruby/1.8/rubygems.rb:157: inactivate'
from .../jruby/1.1.4/lib/ruby/site_ruby/1.8/rubygems.rb:49: in
$> gem install hoe
(インストールされたhoe-1.10.0および依存関係rubyforge-1.0.3)
$> spec --help
使用法:spec(FILE | DIRECTORY | GLOB)+ [options]
(etc.、etc.、etc.)
「geminstallrspec」は依存関係をインストールしないようです。
Windows上のJRuby専用かどうかはわかりません...他のOSはテストされていません。
ruby-on-rails - RSpecはredirect_to問題を解決する必要があります
Railsコントローラーの仕様を書いています。これは私がテストしているアクションです:
そして、これはそれを検証する仕様です:
それでも、RSpec からこのエラーが発生します。
'CoursesController POST /courses [適切な入力]
作成後にコースインデックスページにリダイレクトする必要があります」
失敗した
「/courses」へのリダイレクトが期待されていましたが、リダイレクトされませんでした
なぜこれが起こるのですか?
解決した
rishavrastogiが述べたように、be_successは2xx の範囲の http コードを想定し、リダイレクトは 3xx の範囲 (実際には 302) に分類されます。
アサーションを => response.should be_redirectに変更する必要があります。
ただし、この場合、応答がリダイレクトであることを確認してから、特定のページにリダイレクトされることを確認するのは冗長であるため、アサーションはもう必要ありません。
ruby-on-rails - 以前のバージョンの Rspec で Specs を実行するにはどうすればよいですか?
BDD と TDD についてもっと学びたいと思って、自分のマシンの 1 つで RSpec チュートリアルに従っています。私のセットアップはRails 2.2.2とRspec 1.1.12でした
今夜、私はプライマリ マシンで続行することに決め、コードをポータブルからデスクトップに移動しました。RSpec がないので、gem をインストールしました。. .
争いと中傷!新しいバージョンの Rspec がインストールされました! 1.2.0! そして今、私のテストはいたるところで失敗しています! 私は完全にフォローアップして最新バージョンを学習するつもりですが、最初からやり直すことなく、チュートリアルの残りの部分を完了したいと思っています. 不思議なんだけど。以前の Rspec 1.2.12 に対してコードを実行するようにインストールして指定する方法はありますか?