문제

나는 다음과 같은 SuckerPunch 작업을 정의했습니다.

class MyWorker
  include SuckerPunch::Job

  def perform(account)
    @account = account
  end

  def params
    @account
  end
end

그리고 RSpec을 사용하여 테스트하고 싶습니다.

describe MyWorker do
  before { subject.perform("test@mail.nl") }

  its(:params) { should eq "test@mail.nl" }
end

없이 테스트할 때는 잘 작동합니다. include SuckerPunch::Job.아마도 주제가 다음의 인스턴스를 참조하기 때문일 것입니다. ActorProxy 대신에 MyWorker.

어떻게 테스트해야 하나요? MyWorker?아니면 어떻게 인스턴스에 액세스해야 합니까? MyWorker?나는 읽었다 문제 셀룰로이드 위키에 설명되어 있지만 #wrapped_object 메소드는 (더 이상) 존재하지 않습니다.

도움이 되었습니까?

해결책

당신이 보면 https://github.com/brandonhilkert/sucker_punch/blob/master/lib/sucker_punch/job.rb, 너도 그걸 보게 될 거야 MyWorker.new 실제로 인스턴스가 아닌 다른 것을 반환하도록 재정의되고 있습니다. MyWorker 수업.실제로는 Celluloid::PoolManager.

어쨌든, 접속하고 싶다면 params 내에 정의된 인스턴스 메소드 MyWorker, 당신은 할 수 있습니다 allocate 클래스의 인스턴스는 다음과 같습니다.

describe MyWorker do
  subject { MyWorker.allocate }
  before { subject.perform("test@mail.nl") }

  its(:params) { should eq "test@mail.nl" }
end

allocate 인스턴스 메서드는 다음과 같습니다. Class 처럼 new, 하지만 전화를 걸지 않고 initialize.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top