这是我的设置:
空中制动器
require 'airbrake'
Airbrake.configure do |c|
c.ignore_environments = [:test, :development]
c.project_id = ENV['PROJECT_ID']
c.project_key = ENV['PROJECT_KEY']
end
use Airbrake::Rack::Middleware
规范助手.rb
RSpec.configure do |config|
config.before(:suite) do
FactoryGirl.reload
FactoryGirl.define do
to_create { |instance| instance.save }
end
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)
Airbrake.configure(:test) do |c|
c.project_id = ENV['PROJECT_ID']
c.project_key = ENV['PROJECT_KEY']
end
end
config.around(:each) do |example|
DatabaseCleaner.cleaning do
example.run
end
end
config.include FactoryGirl::Syntax::Methods
end
工人试验规范
require 'spec_helper'
RSpec.describe NotificationWorker do
it "perform should call Airbrake#notify" do
anotification_worker = LNotificationWorker.new
airbrake_notification_worker.perform("some error message"))
expect(Airbrake).to receive(:notify).with("some error message")
end
end
我在其他(非sidekiq)测试中调用airbrake notify,他们发现适当的env变量很好。
但是,如果使用上述设置运行上述sidekiq测试,则会出现以下错误:
Airbrake::Error:
the 'default' notifier isn't configured
但如果我将spec_helper.rb中的airbrake配置更改为:
Airbrake.configure do |c|
c.project_id = ENV['PROJECT_ID']
c.project_key = ENV['PROJECT_KEY']
end
在测试中可以找到env密钥。为什么会这样?
最佳答案
当您说Airbrake.configure(:test)
时,并不意味着“为test
RAILS_ENV
配置空气制动”。而是创建一个非默认的named notifier。然后,您可以通过说:test
向通知程序发送特定通知。但这不是关于开发/测试/生产,而是关于对通知进行分类。
所以问题是,您已经配置了一个名为Airbrake.notify("oops", {time: Time.now}, :test)
的通知程序,但是您还没有配置一个名为test
的通知程序,而default
是airbrake希望在您不告诉airbrake的情况下使用的通知程序。这就是为什么当你简单地说default
的时候你的规范就通过了。
关于ruby - 当我指定环境时,为什么RSpec在涉及Sidekiq的测试中找不到Airbrake env key ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34623599/