2

我发现那个 stackoverflow 旧帖子建议model_entity.send(:before_create)但现在它不起作用。那么,我该如何测试应该执行的方法before create, update, destroy。还有另一篇文章,但我不知道在我的情况下我应该做什么。

class User < ActiveRecord::Base

  before_create do |user|
    user.secure_token = UUID.new.generate
  end
end

关键是我可以用这段代码创建一个方法,然后调用它。还有其他方法吗?

一般来说,如果我想测试仅在我的模型中的 after_create 方法,我应该创建模型对象并检查它。但是,我想,这是不必要的行动。我可以在不创建任何实例的情况下检查此方法。

4

3 回答 3

5

有一种干的方法:

expect{ user.save }.to change{ user.secure_token }
于 2014-02-21T01:09:23.557 回答
3

刚刚发现了一个棘手的问题。如果您需要验证实际结果,请单独验证,因为:secure_token=如果您使用.should_receive(:secure_token=). 例子:

型号如上:

describe "verifies that secure_token= is called" do
  @user = User.new
  @user.should_receive(:secure_token=)
  @user.save
end

describe "verifies the result is set" do
  @user = User.new
  @user.save
  expect(@user.secure_token).not_to be_empty
end

但是如果你把 expect not 和 should_receive 放在同一个测试中,那么测试就会失败。

于 2013-02-20T12:43:45.953 回答
2

如果您使用的是 rspec,我猜您可以这样做:

@user = User.new
@user.should_receive(:secure_token)
@user.save
于 2012-09-18T17:11:28.753 回答