रेल मॉडल चश्मा गुजर रहा है, Sidekiq spec विफल - रूबी-ऑन-रेल, rspec, sidekiq

मैं एक रेल (4.1.0) ऐप बना रहा हूं जो एक सर्वेक्षण चलाता है। प्रत्येक सर्वेक्षण में है n के साथ मैचअप n सीटें। यहां मेरे मॉडल हैं:

class Matchup < ActiveRecord::Base
has_many :seats, dependent: :destroy

def winning_seat
seats.sort { |a,b| a.number_of_votes <=> b.number_of_votes }.last
end
end

class Seat < ActiveRecord::Base
belongs_to :matchup

validates :matchup, presence: true
validates :number_of_votes, presence: true

def declare_as_winner
self.is_winner = true
self.save
end

end

बिना किसी मुद्दे के मिलान और सीट पास के लिए मेरी चश्मा।एक सर्वेक्षण के अंत में, मुझे विजेता को प्रदर्शित करने की आवश्यकता है। मैं चुनाव के अंत को संभालने के लिए एक साइडकीक कार्यकर्ता का उपयोग कर रहा हूं। यह कई चीजें करता है, लेकिन यहां प्रश्न में कोड है:

class EndOfPollWorker
include Sidekiq::Worker

def perform(poll_id)
poll = Poll.where(:id poll_id)
poll.matchups.each do |matchup|
# grab the winning seat
winning_seat = matchup.winning_seat
# declare it as a winner
winning_seat.declare_as_winner
end
end
end

इस कार्यकर्ता के लिए कल्पना पास नहीं होती है:

require "rails_helper"

describe "EndOfPollWorker" do
before do
#this simple creates a matchup for each poll question and seat for every entry in the matchup
@poll = Poll.build_poll
end

context "when the poll ends" do
before do
@winners = @poll.matchups.map { |matchup| matchup.seats.first }
@losers = @poll.matchups.map { |matchup| matchup.seats.last }
@winners.each do |seat|
seat.number_of_votes = 1
end

@poll.save!

@job = EndOfPollWorker.new
end

it "it updates the winner of each matchup" do
@job.perform(@poll.id)
@winners.each do |seat|
expect(seat.is_winner?).to be(true)
end
end

it "it does not update the loser of each matchup" do
@job.perform(@poll.id)
@losers.each do |seat|
expect(seat.is_winner?).to be(false)
end
end

end

end
end
end

जब मैं इस spec चलाता हूं, मुझे मिलता है:

EndOfPollWorker when poll ends it updates the winner of each matchup
Failure/Error: expect(seat.is_winner?).to be(true)

expected true
got false

सीट और मैचअप मॉडल के लिए मेरी चश्मा बस ठीक है। मैंने बहुत सारे टेस्ट कोड को काट दिया है, इसलिए किसी भी मेल नहीं खाते से बहाना, मान लीजिए कि "समस्या नहीं है!

साथ ही, जब मजदूर वास्तव में विकास मोड में भाग लेते हैं, तो सीटें .is_winner विशेषता वास्तव में अद्यतन नहीं होती है।

धन्यवाद

उत्तर:

जवाब के लिए 0 № 1

साइडकीक के पास आपकी समस्या से कोई लेना देना नहीं है।आप सीधे प्रदर्शन कर रहे हैं ताकि समस्या rspec और activerecord के साथ हो। उदाहरण के लिए, कोड को निष्पादन विधि से बाहर खींचें और इसे सीधे spec में डालें, यह अभी भी विफल होना चाहिए।

मुझे संदेह है कि उदाहरण बेकार हैं और #perform में किए गए परिवर्तनों को चुनने के लिए डेटाबेस से # पुनः लोड होने की आवश्यकता है।


संबंधित सवाल
सबसे लोकप्रिय