Skip to main content
 首页 » 编程设计

ruby-on-rails中测试 twilio API

2024年11月24日69lori

首先我要说的是,我是一个在这里编写测试的新人,只使用 Rails 几个星期。 为我的手机验证编写 rspec 测试。首先是一些代码:

User.stub(:create).and_return(@user) 
@user.stub(:send_sms).with('foo').and_return('bar') 
 
sign_in @user 
visit home_path 
 
click_link 'Telephone verification' 

现在这是我的用户中的方法,我想 stub 并返回任意值,而不实际进入真正的方法:

def send_sms 
    TWILIO_CLIENT.account.sms.messages.create( 
      :from => TWILIO_SMS_NUMBER, 
      :to => phone, 
      :body => "Verification code is: #{sms_code}" 
    ) 
  end 

我在这里做的事情正确吗?我什至不确定,我读了很多关于这个主题的东西,仍然很困惑。

由于我没有为测试环境初始化 TWILIO_CLIENT,所以当我 save_and_open_page 时,我收到此错误:

uninitialized constant User::TWILIO_CLIENT 

所以我想 stub send_sms 方法,这是正确的做法吗?

请您参考如下方法:

I don't have TWILIO_CLIENT initialized for test environment

您需要在某处定义这些常量。它应该很简单:

TWILIO_CLIENT = double('twilio_client') 
TWILIO_SMS_NUMBER = double('twilio_sms_number') 

现在您可以在测试替身上 stub 方法。

要对调用本身进行 stub ,您可以使用 stub_chain:

TWILIO_CLIENT.stub_chain(:account, :sms, :messages, :create) 

虽然这应该可行,但每当您看到 stub_chain 时,它都表明您可能需要重构。在这种情况下,您可能不应该接触 TWILIO_CLIENT 并扰乱其内部结构。