У меня была такая же проблема с использованием команды brew для запуска службы mysql. Если вы используете MacOS, перейдите в раздел «Системные настройки» и щелкните значок «MySQL». Вероятно, вы увидите информационное сообщение о разрешении, которое запрещено в некоторых каталогах. Все, что вам нужно сделать, это разрешить это.
Это сработало для меня.
sudo chown -R mysql /usr/local/mysql/data
Я нашел лучшее решение на домашней странице rspec. По-видимому, он поддерживает общие группы примеров. Из https://www.relishapp.com/rspec/rspec-core/v/2-13/docs/example-groups/shared-examples !
Группы общих примеров
Вы можете создать общие группы примеров и включить эти группы в другие группы.
Предположим, у вас есть поведение, которое применяется ко всем редакциям вашего продукт, как большой, так и малый.
Во-первых, исключите «общие» поведение:
shared_examples_for "all editions" do
it "should behave like all editions" do
end
end
затем, когда вам нужно определить поведение для больших и малых изданий, ссылаться на общее поведение, используя метод it_should_behave_like ().
describe "SmallEdition" do
it_should_behave_like "all editions"
it "should also behave like a small edition" do
end
end
Это - текущий шаблон, так как Вы испытываете необходимость для тестирования больше чем одного модуля. По этой причине это более, чем желательно для создания помощника для этого.
я нашел это сообщение , который объясняет, как сделать это, но я справляюсь здесь, так как сайт мог бы быть удален в какой-то момент.
Это должно избежать , экземпляры объектов не реализуют метод экземпляра:: безотносительно ошибка Вы добираетесь при попытке до allow
методы на dummy
класс.
В spec/support/helpers/dummy_class_helpers.rb
module DummyClassHelpers
def dummy_class(name, &block)
let(name.to_s.underscore) do
klass = Class.new(&block)
self.class.const_set name.to_s.classify, klass
end
end
end
В spec/spec_helper.rb
# skip this if you want to manually require
Dir[File.expand_path("../support/**/*.rb", __FILE__)].each {|f| require f}
RSpec.configure do |config|
config.extend DummyClassHelpers
end
В Ваших спецификациях:
require 'spec_helper'
RSpec.shared_examples "JsonSerializerConcern" do
dummy_class(:dummy)
dummy_class(:dummy_serializer) do
def self.represent(object)
end
end
describe "#serialize_collection" do
it "wraps a record in a serializer" do
expect(dummy_serializer).to receive(:represent).with(an_instance_of(dummy)).exactly(3).times
subject.serialize_collection [dummy.new, dummy.new, dummy.new]
end
end
end
Для тестирования модуля используйте:
describe MyCoolModule do
subject(:my_instance) { Class.new.extend(described_class) }
# examples
end
Для высушивания некоторых вещей Вы используете через несколько спецификаций, можно использовать общий контекст:
RSpec.shared_context 'some shared context' do
let(:reused_thing) { create :the_thing }
let(:reused_other_thing) { create :the_thing }
shared_examples_for 'the stuff' do
it { ... }
it { ... }
end
end
require 'some_shared_context'
describe MyCoolClass do
include_context 'some shared context'
it_behaves_like 'the stuff'
it_behaves_like 'the stuff' do
let(:reused_thing) { create :overrides_the_thing_in_shared_context }
end
end
Ресурсы:
Что сказал Майк. Вот тривиальный пример:
код модуля ...
module Say
def hello
"hello"
end
end
фрагмент спецификации ...
class DummyClass
end
before(:each) do
@dummy_class = DummyClass.new
@dummy_class.extend(Say)
end
it "get hello string" do
expect(@dummy_class.hello).to eq "hello"
end
Off the top of my head, could you create a dummy class in your test script and include the module into that? Then test that the dummy class has the behaviour in the way you'd expect.
EDIT: If, as pointed out in the comments, the module expects some behaviours to be present in the class into which it's mixed, then I'd try to implement dummies of those behaviours. Just enough to make the module happy to perform its duties.
That said, I'd be a little nervous about my design when a module expects a whole lot from its host (do we say "host"?) class - If I don't already inherit from a base class or can't inject the new functionality into the inheritance tree then I think I'd be trying to minimise any such expectations that a module might have. My concern being that my design would start to develop some areas of unpleasant inflexibility.