Rspec的
context "has non ascii characters" do
it "will not call get_imdb" do
expect_any_instance_of(Celebrity).not_to receive(:get_imdb)
FactoryGirl.build(:imdb_celebrity, first_name: "Sæthy")
end
end
模型:
def celebrity_status
if full_name.ascii_only?
get_imdb ## << -- returns string or nil
end
### If get_imdb returns nil (or isn't called), record is not valid
end
如果get_imdb返回nil或未被调用,则验证失败。我的问题是我试图测试该方法的ascii字符部分,但通过这样做 - 我的验证失败并给我一个&#34;验证失败&#34;运行Rspec测试时控制台出错。
但这就是我想要发生的事情......我希望验证失败。
我该如何解决这个问题?
答案 0 :(得分:1)
模型验证失败本身不应引发异常。您可能正在尝试保存记录,这会使save
失败,如果通过save!
或create!
进行调用,则可能会引发异常。
您可以通过调用valid?
expect(celebrity.valid?).to be false
检查错误哈希以查看它是否具有预期内容也很有用:
celebrity.valid? # => false
expect(celebrity.errors[:my_error]).to equal "my error message"
答案 1 :(得分:0)
如果您想测试代码是否有异常,则应使用Rspec&#39; raise_error
匹配器:
expect { 3 / 0 }.to raise_exception
此处有更多信息:https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers/raise-error-matcher