我正在尝试完成RSpec请求规范,但我遇到了问题。
有人可以向我解释为什么下面的测试按预期工作:
require 'rails_helper'
RSpec.describe "RegisteredApplication", :type => :request do
let(:user) { FactoryGirl.create(:user) }
it "should create an application" do
login_as(user, :scope => :user)
post "/registered_applications", registered_application: { name: "My new App", url: "www.newapp.test" }
expect(response).to have_http_status(:found)
end
end
但是此测试失败并出现以下错误:失败/错误:删除" / registered_applications / 1" NoMethodError: 注册应用程序的未定义方法调用:0x007f950f19b850
require 'rails_helper'
RSpec.describe "RegisteredApplication", :type => :request do
let(:app) { FactoryGirl.create(:registered_application) }
let(:user) { app.user }
it "should create an application" do
login_as(user, :scope => :user)
post "/registered_applications", registered_application: { name: "My new App", url: "www.newapp.test" }
end
end
规格/工厂/ registered_applications.rb
FactoryGirl.define do
factory :registered_application do
name 'My newest application'
url 'www.mynewestapp.test'
user
end
end
规格/工厂/ users.rb的
FactoryGirl.define do
factory :user do
name "Jack Sparrow"
email { Faker::Internet.email }
password "helloworld"
password_confirmation "helloworld"
confirmed_at Time.now
end
end
我的RegisteredApplication模型有validates :user, presence: true
。这就是我创建一个let(:user) { FactoryGirl.create(:user) }
用户,签署该用户,然后手动输入发布请求的原因。为了尝试保持干燥,我决定在user
工厂中设置registered_applications_spec.rb
关联,现在我不断收到上面列出的错误。关于为什么第一次测试通过而我的第二次重构测试失败的任何想法?
答案 0 :(得分:0)
在这里回答我自己的问题。事实证明我所要做的就是改变:
let(:app) { FactoryGirl.create(:registered_application) }
到
let(:any_other_name) { FactoryGirl.create(:registered_application) }
事实证明,app
方法在请求规范所需的地方使用。