gpt4 book ai didi

ruby-on-rails - Rspec 模拟:ActiveRecord::AssociationTypeMismatch

转载 作者:行者123 更新时间:2023-12-04 10:11:55 24 4
gpt4 key购买 nike

我是 Rspec 的新手,正在尝试为用户配置文件设置测试。配置文件属于用户。

现在,我与通过用户模型工作的第三方站点有一个 API 集成,但该 API 链接的一些信息包含在 Profile 中,所以我在 Profile 上有一个“after_update”过滤器,告诉父用户保存,这会触发 API 的更新。

我正在尝试为此编写一个测试,并且得到一个 ActiveRecord::AssociationTypeMismatch。原因是我使用的是模拟用户,但我试图测试更新配置文件时它会发送 :save 给用户。另外,用户模型有一个电子邮件确认过程和上述 API 调用在它的创建过程中,因此实际创建用户只是为了测试这一点确实不理想。

这是我的测试:

it "should save the parent user object after it is saved" do
user = double('user', :save => true )
profile = Profile.create( :first_name => 'John', :last_name => 'Doe' )
profile.user = user

user.should_receive(:save)
end

因此,显然 ActiveRecord 错误是由于尝试将模拟用户与期望关联真实用户的配置文件相关联而引起的。

我的问题是,在编写 Rails 测试时如何避免此类问题?我想让这个测试做的就是确保 Profile 调用 :save 到它的父用户上。有没有更聪明的方法来做到这一点,或者 ActiveRecord 错误的解决方法?

谢谢!

最佳答案

您应该可以使用 mock_model为了这:

it "should save the parent user object after it is saved" do
user = mock_model(User)
user.should_receive(:save).and_return(true)
profile = Profile.create( :first_name => 'John', :last_name => 'Doe' )
profile.user = user
end

关于ruby-on-rails - Rspec 模拟:ActiveRecord::AssociationTypeMismatch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4882741/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com