我有AR模型關注Uuidable,看起來像這樣:Rspec在describe_class或DummyClass中測試AR模型問題?
module Uuidable
extend ActiveSupport::Concern
included do
before_create :generate_uuid
end
protected
def generate_uuid
self.uuid = #some code
end
end
到目前爲止,我已經寫了shared_examples_for Uuidable
,看起來像這樣:
shared_examples_for Uuidable do
let(:model) { FactoryGirl.build(described_class) }
it { expect(model).to callback(:generate_uuid).before(:create) }
describe '#generate_uuid' do
it { expect{model.save}.to change {model.uuid} }
it 'should not generate same uuid' do
allow(SecureRandom).to receive(:uuid).and_return("c640f32c-e21b-44ea-913e-7041fdb6de85", "c640f32c-e21b-44ea-913e-7041fdb6de85", "e93f0130-3a81-406f-8871-609d89ae0850")
model.save
expect(FactoryGirl.create(described_class).uuid).not_to eq(model.uuid)
end
context 'generated uuid field' do
before(:each) { model.save }
it { expect(model.uuid).to be_kind_of(String) }
it { expect(model.uuid).to match(/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i)}
end
end
end
所以...我想知道是在每個Uuidable
模型中測試#generate_uuid
方法的行爲是否正確?
class DummyClass < ActiveRecord::Base
創建測試
Uuidable
關注和
shared_examples
第二個選項,你認爲什麼只留下it { expect(model).to callback(:generate_uuid).before(:create) }
?什麼是最好的方法?