मेरे पास एक account मॉडल है जिसमें trial_ends_at फ़ील्ड है जिसमें मैं उपयोगकर्ता द्वारा खाता बनाते समय 30.days.from_now सेट करना चाहता हूं।

मैं परीक्षण अवधि का परीक्षण करने के लिए RSpec और timecop का उपयोग कर रहा हूं, लेकिन ऐसा करने में सक्षम नहीं हूं।

अब तक की प्रगति

it "sets the trial_ends_at to 30 days from now" do
  post admin_accounts_path, params: { account: { name: "My company", subdomain: "example" } }

  Timecop.freeze(Time.zone.today + 30) do
    expect(Account.first.trial_ends_at).to eq(30.days.from_now)
  end
end

परीक्षा पास नहीं होती है।

वैकल्पिक रूप से, मैंने भी कोशिश की

it "sets the trial_ends_at to 30 days from now" do
  post admin_accounts_path, params: { account: { name: "My company", subdomain: "example" } }

  Timecop.freeze(Time.zone.today + 30) do
    expect(Account.first.on_generic_trial?).to be_truthy
  end
end

यह परीक्षण भंगुर है। यह 30.days.from_now के लिए गुजरता है और यदि परीक्षण इससे कम सेट किया जाता है तो यह विफल हो जाता है, लेकिन यदि परीक्षण इससे अधिक सेट किया जाता है, उदाहरण के लिए: 50.days.from_now

on_generic_trial? विधि pay रत्न से है।

0
abeidahmed 1 जून 2021, 19:55
वैसे, नए रेल संस्करणों में आप इसे Timecop के बिना पूरा कर सकते हैं :-)
 – 
Frank Groeneveld
2 जून 2021, 14:50
क्या आप अपना समाधान साझा कर सकते हैं?
 – 
abeidahmed
2 जून 2021, 17:07

1 उत्तर

सबसे बढ़िया उत्तर

आपका कोड कुछ इस तरह है: खाता बनाएं और trial_ends_at = Time.now + 30 days सेट करें, फिर अगले महीने आगे बढ़ें, फिर उम्मीद करें कि trial_ends_at अगले महीने के बराबर है, इसलिए यह विफल रहा। कोशिश करते हैं:

it "sets the trial_ends_at to 30 days from now" do
  Timecop.freeze(Time.zone.today) do
    post admin_accounts_path, params: { account: { name: "My company", subdomain: "example" } }
    expect(Account.first.trial_ends_at).to eq(30.days.from_now)
  end
end
2
Lam Phan 1 जून 2021, 20:26