相关疑难解决方法(0)

rspec中的stub随机值,带有secure_random

我正在尝试为我的gem编写规范,它生成otp并将其保存在db中.现在我正在为它编写规范.所以基本上我有三个方法generate_otp!,regenerate_otp!,verify_otp(otp).是什么generate_otp!做的是它调用的方法generate_otp包含三个变量

  1. otp_code - 基本上是使用secure_random生成的随机值
  2. otp_verified - 一个布尔值,用于设置是否验证otp的状态
  3. otp_expiry_time - 设置otp的到期时间,可由rails app在配置中设置.

这三个都是我的数据库的列.

现在generate_otp我调用了将值保存到db active_recordssave方法之后.

现在进行测试我正在使用:memory:并在表中存储值.经过测试我正在丢弃数据库.现在,我没有得到如何存根随机生成值和测试值是否被分配或不全部三列,即otp_code,otp_verified,otp_expiry_time.

这是我需要测试的方法的代码.

def generate_otp
    self.otp_verified = false
    self.otp_expiry_time = OtpGenerator::configuration.otp_expiry_time 
    self.otp_code = SecureRandom.hex(4)
  end

def generate_otp!
   generate_otp
   save
end
Run Code Online (Sandbox Code Playgroud)

对此有何帮助?我也检查了这个问题,但没有多大帮助.这是我第一次编写规范,并且对rspecs没有那么多经验.我还研究了mock和stub 的官方文档,但我真的很困惑.

更新:otp_spec代码

require 'spec_helper'

describe OtpGenerator do

  let(:user) { build_mock_class.new() }
  before(:all) { create_table }
  after(:all) { drop_table } …
Run Code Online (Sandbox Code Playgroud)

ruby unit-testing rubygems rspec ruby-on-rails

8
推荐指数
1
解决办法
2183
查看次数

Ruby:在代码中使用rand()但编写测试来验证概率

我有一些代码可以根据加权随机来提供东西.重量更重的东西更有可能随机选择.现在我是一个很好的rubyist,我想用测试来覆盖所有这些代码.而且我想测试根据正确的概率获取的东西.

那么我该如何测试呢?为随机的东西创建测试会使实际与预期的比较变得非常困难.我有一些想法,以及为什么它们不能很好地工作:

  • Stub Kernel.rand在我的测试中返回固定值.这很酷,但rand()被多次调用,我不确定我是否可以通过足够的控制来测试它以测试我需要的东西.

  • 取一个随机项很多次,并比较实际比率与预期比率.但除非我可以无数次运行,否则这将永远不会是完美的,如果我在RNG中运气不好,可能会间歇性地失败.

  • 使用一致的随机种子.这使得RNG可重复,但它仍然没有给我任何验证项目A将在80%的时间内发生(例如).

那么我可以使用什么样的方法来编写随机概率的测试覆盖率?

ruby random statistics unit-testing probability

7
推荐指数
2
解决办法
4551
查看次数

如何在rspec中存根rand?

我正在使用Ruby 2.3.4和rspec 3.6.0.

我正在为一个使用的对象编写测试rand(10000..99999).我找不到任何文档rand来查看它所属的对象.我尝试了stubbing Kernel,ObjectRandom(见下文),但我的尝试都没有导致rand对象的存根.

allow(Kernel).to receive(rand).and_return(12345)
allow(Object).to receive(rand).and_return(12345)
allow(Random).to receive(rand).and_return(12345)
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏.

ruby rspec

7
推荐指数
2
解决办法
1741
查看次数

Rspec/capybara - 测试一个类或另一个类的存在

在我的 ruby​​ on Rails 4.2 应用程序中,在一个页面上,我有一个条件后端规则,该规则在类的更改中转换为页面前端

<div id="content">
    <i class='<% if x=true %>glyphicon glyphicon-thumbs-down<% else> glyphicon glyphicon-thumbs-up ><% end %>' </i>
       this is the message.
</div>
Run Code Online (Sandbox Code Playgroud)

如何使用 rspec 3/capybara 检查页面是否包含类 glyphicon-thumbs-down 或类 glyphicon-thumbs-up ?

我尝试了下面的代码,但失败了:

it "should sheck one of the 2 classes presence" do
  expect(page).to have_css '.glyphicon-thumbs-down' || expect(page).to have_css '.glyphicon-thumbs-up'
end
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

syntax error, unexpected tIDENTIFIER, expecting keyword_end (SyntaxError)
Run Code Online (Sandbox Code Playgroud)

ruby rspec ruby-on-rails capybara ruby-on-rails-4

4
推荐指数
2
解决办法
6389
查看次数