我正在尝试为我的gem编写规范,它生成otp并将其保存在db中.现在我正在为它编写规范.所以基本上我有三个方法generate_otp!,regenerate_otp!,verify_otp(otp).是什么generate_otp!做的是它调用的方法generate_otp包含三个变量
otp_code - 基本上是使用secure_random生成的随机值otp_verified - 一个布尔值,用于设置是否验证otp的状态otp_expiry_time - 设置otp的到期时间,可由rails app在配置中设置.这三个都是我的数据库的列.
现在generate_otp我调用了将值保存到db active_records的save方法之后.
现在进行测试我正在使用: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) 我有一些代码可以根据加权随机来提供东西.重量更重的东西更有可能随机选择.现在我是一个很好的rubyist,我想用测试来覆盖所有这些代码.而且我想测试根据正确的概率获取的东西.
那么我该如何测试呢?为随机的东西创建测试会使实际与预期的比较变得非常困难.我有一些想法,以及为什么它们不能很好地工作:
Stub Kernel.rand在我的测试中返回固定值.这很酷,但rand()被多次调用,我不确定我是否可以通过足够的控制来测试它以测试我需要的东西.
取一个随机项很多次,并比较实际比率与预期比率.但除非我可以无数次运行,否则这将永远不会是完美的,如果我在RNG中运气不好,可能会间歇性地失败.
使用一致的随机种子.这使得RNG可重复,但它仍然没有给我任何验证项目A将在80%的时间内发生(例如).
那么我可以使用什么样的方法来编写随机概率的测试覆盖率?
我正在使用Ruby 2.3.4和rspec 3.6.0.
我正在为一个使用的对象编写测试rand(10000..99999).我找不到任何文档rand来查看它所属的对象.我尝试了stubbing Kernel,Object和Random(见下文),但我的尝试都没有导致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 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 ×4
rspec ×3
unit-testing ×2
capybara ×1
probability ×1
random ×1
rubygems ×1
statistics ×1