gpt4 book ai didi

ruby-on-rails - Rspec 在 "let"s 上失败

转载 作者:行者123 更新时间:2023-11-28 20:20:29 26 4
gpt4 key购买 nike

我有一个邮件

class MyMailer < ActionMailer::Base
def send1(a, b, c)
#.....
mail(....).deliver
end

def send2(a, b, c)
#.....
mail(....).deliver
end
end

然后我测试一下

describe MyMailer do
describe "#send1" do
let(:a) { "a@b.com" }
let(:b) { "message" }
let(:c) { FactoryGirl.create :user }
let(:send1_email1) { MyMailer.send1 a, b, c }

after(:all) { MyMailer.deliveries.clear }

it "should send an email" do
expect(MyMailer.deliveries.count).to eq(1)
end

#........ other ITs testing send1_emai1

describe "#send2" do
let(:d) { "aaa@bbbb.com" }
let(:e) { FactoryGirl.create :admin }
let(:g) { "message2" }
let(:send1_emai2) { MyMailer.send2 d, e, g }

after(:all) { MyMailer.deliveries.clear }

it "should send an email2" do
expect(MyMailer.deliveries.count).to eq(1)
end

#........ other ITs testing send1_emai2

end

所以大多数时候由于错误而失败应该发送一封电子邮件 expect 1 got 2 并且应该发送一封电子邮件 expect 1 got 4 or 0有时数字不同(得到 0 - 4)。我试着这样做:

  let!(:send1_email) { MyMailer.send1 a, b, c }
let!(:send1_emai2) { MyMailer.send2 d, e, g }

但也失败了。

Failure/Error: expect(MyMailer.deliveries.count).to eq(1)

expected: 1
got: 4

我想知道为什么?

之前我使用了 before :all@variables 一切都很好(没有错误)

同样的错误:

   it "should send an email" do
expect(MyMailer.deliveries.count).to eq(1)
MyMailer.deliveries.clear
end

it "should send an email2" do
expect(MyMailer.deliveries.count).to eq(1)
MyMailer.deliveries.clear
end

最佳答案

正如 this location 中的文档所述.

Use let to define a memoized helper method. The value will be cached across multiple calls in the same example but not across examples.

此外,我确定您知道 rspec 以随机顺序运行示例,这意味着其他示例调用邮件发送 let() 帮助程序,这意味着当它到达您的测试时,该套件已经发送了 4 封电子邮件,使您的测试失败。您不应该依赖定义测试的顺序。您应该确保您的测试数据在您的示例之前被擦洗和清理。

关于ruby-on-rails - Rspec 在 "let"s 上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21617632/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com