dachary
(Loïc Dachary)
2016 年 7 月 13 日午後 7:35
1
Hi,
I’d like to only run the tests at discourse/plugins/poll/spec instead of the whole suite with bundle exec rake autospec p l=5 . How can I do that ?
Ideally that would not be necessary if autospec detected changes made to plugins but my understanding is that it’s not yet able to do so.
Thanks in advance for your help
gerhard
(Gerhard Schlager)
2016 年 7 月 13 日午後 7:58
2
Not sure how it works with autospec since I’m running the specs manually most of the time.
In order to run the plugin specs I’m always setting an environment variable in my IDE: LOAD_PLUGINS=1
dachary
(Loïc Dachary)
2016 年 7 月 13 日午後 8:26
3
Cool ! How would you manually run the spec of the poll plugin ? My IDE is the CLI
dachary
(Loïc Dachary)
2016 年 7 月 13 日午後 8:33
4
I tried
bundle exec rake autospec plugins/poll/spec/*
but it shows
Randomized with seed 8681 …… …*…
etc. which suggests it runs more than what I’d expect.
gerhard
(Gerhard Schlager)
2016 年 7 月 13 日午後 8:40
5
# this runs just the specs in one file
LOAD_PLUGINS=1 bundle exec rspec plugins/poll/spec/controllers/posts_controller_spec.rb
# this runs all the specs of the poll plugin
LOAD_PLUGINS=1 bundle exec rspec plugins/poll/spec
tgxworld
(Alan Tan)
2016 年 7 月 13 日午後 9:00
6
Another way to do it is via the rake task
bundle exec rake plugin:spec["poll"]
dachary
(Loïc Dachary)
2016 年 7 月 13 日午後 9:14
7
It works, thanks ! Where would be the most relevant topic for this information ? Or maybe there is a file in the git repository that should be updated ? The closest thing I found is the Beginner’s Guide to Creating Discourse Plugins Part 6: Acceptance Tests but it only covers part of the qunit tests.
dachary
(Loïc Dachary)
2016 年 7 月 13 日午後 9:16
8
This does not work for me but
bundle exec rake plugin:spec poll
does.
dachary
(Loïc Dachary)
2016 年 7 月 13 日午後 9:27
9
I proposed a change to the VAGRANT.md file . Not sure it’s right but… here it is anyway
sam
(Sam Saffron)
2019 年 5 月 3 日午前 3:53
10
The best way to do this is use autospec, it now works properly even with symlinked plugins
bin/rake autospec
Save plugin.rb file or plugin spec file and it will run.
Be sure to run all plugin migrations with (which will happen magically if you run)
RAILS_ENV=test bin/rake db:migrate
プラグインの仕様を実行する際に問題が発生していました。
RAILS_ENV=test bin/rake db:migrate
を実行した後です。
テスト中のプラグインのマイグレーションが実行されませんでした。その後、以下のコマンドを実行しました:
LOAD_PLUGINS=1 RAILS_ENV=test bundle exec rake db:migrate
これでプラグインのマイグレーションが適用されました!
興味深いことに、LOAD_PLUGINS=1 を指定せず、development 環境ではプラグインのマイグレーションが実行されましたが、testing 環境では実行されませんでした。
david
(David Taylor)
2019 年 11 月 19 日午後 6:24
12
@sam がここに魔法を追加してくれたので、RAILS_ENV=test /bin/rake db:migrate と実行すると自動的にプラグインが読み込まれます。しかし、多くの人は bin のスタブを使用しないため、この問題は引き続きさまざまな人に発生しています。もしかすると、bin のスタブではなく、db:migrate の rake タスク自体にそのロジックを埋め込む必要があるかもしれませんね
通常、テストスイートを実行する際はプラグインを読み込みたくありません。プラグインは機能を上書きすることが多く、コアのテストを失敗させてしまう可能性があるためです。
sam
(Sam Saffron)
2019 年 11 月 19 日午後 11:35
13
それはとても悲しいですね… binstubs は生活をずっと楽にしてくれます。例えば bin/unicorn には多くのマジックが含まれています。
david
(David Taylor)
2019 年 11 月 20 日午前 12:20
14
私は、多くの人が(少なくとも私は)標準的な
rails s
を使用していると思います。
幸い、Rails のマジックのおかげで、これにより rails ビンスタブが実行されます。
# frozen_string_literal: true
require "pathname"
require "rails/version"
module Rails
module AppLoader # :nodoc:
extend self
RUBY = Gem.ruby
EXECUTABLES = ["bin/rails", "script/rails"]
BUNDLER_WARNING = <<EOS
Beginning in Rails 4, Rails ships with a `rails` binstub at ./bin/rails that
should be used instead of the Bundler-generated `rails` binstub.
If you are seeing this message, your binstub at ./bin/rails was generated by
Bundler instead of Rails.
You might need to regenerate your `rails` binstub locally and add it to source
control:
Discourse の Rails ビンスタブは、unicorn ビンスタブを起動します。
# frozen_string_literal: true
if !ENV["RAILS_ENV"] && (ARGV[0] == "s" || ARGV[0] == "server") && Process.respond_to?(:fork)
ENV["UNICORN_PORT"] ||= "3000"
if ARGV[1] == "-p" && (port = ARGV[2].to_i) > 0
ENV["UNICORN_PORT"] = port.to_s
end
ENV["RAILS_LOGS_STDOUT"] ||= "1"
exec File.expand_path("pitchfork", __dir__)
end
APP_PATH = File.expand_path("../config/application", __dir__)
require_relative "../config/boot"
require "rails/commands"
残念ながら、rake は同じマジックの恩恵を受けません。
sam:
ビンスタブは生活を非常に楽にします
私は 4 回余分なキー入力が必要だと数えます :P(ただし、エイリアスを追加したり、direnv のようなものを使用したりすることもできますが)