Ruby on rails RSpec测试未在工厂重新加载的情况下失败

Ruby on rails RSpec测试未在工厂重新加载的情况下失败,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,在激活后强制重新加载用户对象之前,我一直很难通过一个规范测试。我是BDD和rails的新手,在这个例子中我是否完全滥用了factory girl?我应该嘲笑什么吗 作为参考,我正在使用魔法宝石进行用户激活 describe "GET activate" do context "with valid attributes" do it "activates a new user" do user = FactoryGirl.create(:pending_user)

在激活后强制重新加载用户对象之前,我一直很难通过一个规范测试。我是BDD和rails的新手,在这个例子中我是否完全滥用了factory girl?我应该嘲笑什么吗

作为参考,我正在使用魔法宝石进行用户激活

describe "GET activate" do
  context "with valid attributes" do
    it "activates a new user" do
      user = FactoryGirl.create(:pending_user)
      expect {
        get :activate, id: user.activation_token
        user.reload
      }.to change{user.activation_state}.from("pending").to("active")
    end 
  end 
end 

我认为这里让人困惑的是你是如何触发激活的,还是你如何试图验证它是否有效

您通过控制器
get:activate
激活,但随后通过型号
user.activation\u state
进行验证<代码>重新加载在这种情况下是必要的,因为您必须从数据库重新加载属性,以便查看
激活状态已从挂起更改为活动
get:activate
对您的
用户
实例没有影响

为了更清楚,您可以:

  • 在激活响应页面上检查激活结果,或检查控制器实例变量(可能有@user)
  • 改为从模型执行激活。我假设这可能是一个单元测试,它调用一些
    user.activate(activation\u token)
    方法。然后,在不重新加载的情况下检查
    用户
    实例将起作用

  • 有道理。仍在努力理解rails中的所有内容应该放在哪里。谢谢你的帮助。