我试图从我的模型中测试下面看到的set_random_token方法
class Invitation < ActiveRecord::Base
has_and_belongs_to_many :users
validates :name, presence: true, uniqueness: true
validates :number_of_uses, presence: true, numericality: true
validates :token, presence: true, uniqueness: true, format: /\A[0-9A-F]+\z/i
before_create :set_random_token
private
def set_random_token
random_hex = SecureRandom.hex(8)
self.token = random_hex
end
end
以下是我的invitation_spec
中的内容it 'verifies that the token is set' do
@invitation = Invitation.new
@invitation.save
expect(@invitation.token).not_to be_empty
end
这是我得到的错误
2) Invitation verifies that the token is set
Failure/Error: expect(@invitation.token).not_to be_empty
expected to respond to `empty?`
# ./spec/models/invitation_spec.rb:37:in `block (2 levels) in <top (required)>'
我对Rails很陌生,所以如果答案非常明显,我会道歉。
答案 0 :(得分:2)
我已经看到从记录的本地或实例变量检查属性/列的内容并没有产生相同的预期结果的时间。我过去使用的解决方法是使用<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="ansokan">
<begaranominkomstuppgift>
<xsl:for-each select="vardnadshavare">
<person>
<xsl:attribute name="personnummer">
<xsl:value-of select="@personnummer"/>
</xsl:attribute>
<fornamn>
<xsl:value-of select="fornamn"/>
</fornamn>
<efternamn>
<xsl:value-of select="efternamn"/>
</efternamn>
</person>
</xsl:for-each>
</begaranominkomstuppgift>
</xsl:template>
</xsl:stylesheet>
查询记录并检查该列。
为确保您实际获得正确的记录,请在开头添加.first
。
试一试
expect(Table.count).to eq 0
答案 1 :(得分:0)
以下方法触发验证,并且仅当对象有效时才将对象保存到数据库:
- 保存
在您的测试中,您正在实例化一个空的邀请,但邀请函上有许多验证,这会使空的一个无效。
请改为尝试:
@invitation = Invitation.create({name: 'something unique', number_of_uses: 5})
expect(@invitation.token).not_to be_empty
@invitation.save