导致测试失败的Rspec验证错误(但我的意图是出现验证错误)

时间:2015-09-23 17:23:54

标签: ruby-on-rails rspec

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测试时控制台出错。

但这就是我想要发生的事情......我希望验证失败。

我该如何解决这个问题?

2 个答案:

答案 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