2
0
Fork 0
mirror of https://github.com/discourse/discourse.git synced 2026-03-04 01:15:08 +08:00
discourse/spec/tasks/qunit_cli_spec.rb
David Taylor 8671593a99
DEV: Correct bin/qunit random seed handling (#37087)
When using ember exam, we should pass the seed as a CLI argument. It
should only be a query parameter for our custom non-ember-exam test
runs.

Also updates bin/qunit to pass a shorter alphanumeric seed, instead of a
long integer.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: davidtaylorhq <6270921+davidtaylorhq@users.noreply.github.com>
Co-authored-by: Jarek Radosz <jradosz@gmail.com>
2026-01-13 19:37:28 +00:00

171 lines
4.3 KiB
Ruby

# frozen_string_literal: true
describe "bin/qunit" do
def run(*args)
out, err, status = Open3.capture3("bin/qunit", "--dry-run", *args, chdir: Rails.root.to_s)
parsed_args, parsed_env =
if parsed_result = out.match(/Executing: (?<args>\[.+?\])\nwith env: (?<env>\{.+?\})/m)
[JSON.parse(parsed_result[:args]), JSON.parse(parsed_result[:env])]
end
OpenStruct.new(
out: out,
err: err,
status: status.exitstatus,
args: parsed_args,
env: parsed_env,
launched_unicorn: out.include?("[dry-run] skipping unicorn startup"),
)
end
let(:core_test_file) do
Dir.glob("#{Rails.root}/frontend/discourse/tests/integration/**/*-test.js").first
end
let(:chat_test_file) { Dir.glob("#{Rails.root}/plugins/chat/test/**/*-test.js").first }
it "runs all core tests by default" do
result = run
expect(result.status).to eq(0)
expect(result.launched_unicorn).to eq(false)
expect(result.args).to match(
[
"pnpm",
"ember",
"exam",
"--query",
"target=core",
"--random",
a_string_matching(/\A[a-zA-Z0-9]{8}\z/),
"--path",
"dist",
],
)
expect(result.env).to match(
"UNICORN_PORT" => a_truthy_value,
"TESTEM_DEFAULT_BROWSER" => a_truthy_value,
"LOAD_PLUGINS" => "0",
)
end
it "allows running specific file" do
result = run(core_test_file)
expect(result.status).to eq(0)
expect(result.launched_unicorn).to eq(false)
expect(result.args).to match(
[
"pnpm",
"ember",
"exam",
"--query",
"target=core",
"--file-path",
core_test_file.sub("#{Rails.root}/frontend/discourse/", ""),
"--random",
a_string_matching(/\A[a-zA-Z0-9]{8}\z/),
"--path",
"dist",
],
)
expect(result.env).to match(
"UNICORN_PORT" => a_truthy_value,
"TESTEM_DEFAULT_BROWSER" => a_truthy_value,
"LOAD_PLUGINS" => "0",
)
end
it "allows running all plugin tests" do
result = run("--target", "plugins")
expect(result.status).to eq(0)
expect(result.launched_unicorn).to eq(false)
expect(result.args).to match(
[
"pnpm",
"ember",
"exam",
"--random",
a_string_matching(/\A[a-zA-Z0-9]{8}\z/),
"--path",
"dist",
],
)
expect(result.env).to match(
"UNICORN_PORT" => a_truthy_value,
"TESTEM_DEFAULT_BROWSER" => a_truthy_value,
"LOAD_PLUGINS" => "1",
"PLUGIN_TARGETS" => a_string_matching(/,/),
)
end
it "allows running tests for multiple plugins" do
result = run("--target", "chat,discourse-local-dates")
expect(result.status).to eq(0)
expect(result.launched_unicorn).to eq(false)
expect(result.args).to match(
[
"pnpm",
"ember",
"exam",
"--random",
a_string_matching(/\A[a-zA-Z0-9]{8}\z/),
"--path",
"dist",
],
)
expect(result.env).to match(
"UNICORN_PORT" => a_truthy_value,
"TESTEM_DEFAULT_BROWSER" => a_truthy_value,
"LOAD_PLUGINS" => "1",
"PLUGIN_TARGETS" => "chat,discourse-local-dates",
)
end
it "allows running specific plugin test file" do
result = run(chat_test_file)
expect(result.status).to eq(0)
expect(result.launched_unicorn).to eq(false)
expect(result.args).to match(
[
"pnpm",
"ember",
"exam",
"--query",
"target=chat",
"--file-path",
chat_test_file.sub(
"#{Rails.root}/plugins/chat/test/javascripts/",
"discourse/plugins/chat/",
),
"--random",
a_string_matching(/\A[a-zA-Z0-9]{8}\z/),
"--path",
"dist",
],
)
expect(result.env).to match(
"UNICORN_PORT" => a_truthy_value,
"TESTEM_DEFAULT_BROWSER" => a_truthy_value,
"LOAD_PLUGINS" => "1",
)
end
it "prevents running files from multiple targets" do
result = run(core_test_file, chat_test_file)
expect(result.status).to eq(1)
expect(result.out).to include(
"Error: Cannot mix multiple plugin/core targets when running specific files",
)
end
it "launches unicorn when using --standalone" do
result = run("--standalone")
expect(result.status).to eq(0)
expect(result.launched_unicorn).to eq(true)
end
end