RSpec - 输了 post?
RSpec - losing post?
看起来我在这个例子中的更新测试开始时输了 'San Francisco' - 不知道为什么 - 当我在 Post 测试结束时做一个 puts response.body一切正常 - 这是我的 flights_spec.rb:
require 'rails_helper'
require 'spec_helper'
require 'flight'
RSpec.describe FlightsController, type: :controller do
render_views
let(:flight0) { Flight.create(:destination => "Las Vegas") }
it "Get Test" do
puts 'Get Test'
get :index, :format => :json
puts "Body = " + response.body
expect(response.body).to include('Las Vegas')
end
it "Post Test" do
puts 'Post Test'
post :create, :flight => {:destination => "San Francisco"}
puts "Post status:" + response.status.to_s
expect(response).to redirect_to(assigns(:flight))
redirect_to(response.headers['Location'])
get :index, :format => :json
puts "Body = " + response.body
expect(response.body).to include("San Francisco")
end
it "Update Test" do
puts 'Delete Test'
get :index, :format => :json
puts "Body = " + response.body
expect(response.body).to include("San Francisco")
end
end
RSpec 假设您编写的每个测试都独立于其他测试。但是,按照您在这里的方式,Update Test
依赖于 Post Test
来创建它需要的数据。 RSpec 自动撤消您在每次测试之间所做的任何更改。您可以将每个 it
块视为将所有内容重置回初始状态。
一个快速的解决方法是简单地将删除瞄准 Las Vegas 对象,因为由于 let
语句:
已经为每个测试重新创建此航班
it "Update Test" do
puts 'Delete Test'
get :index, :format => :json
puts "Body = " + response.body
expect(response.body).to include("Las Vegas")
# rest of your test
end
另外我要注意的是,您可能 运行 遇到 let
语句的问题,因为它是延迟实例化的,这意味着它可能不会真正创建拉斯维加斯 flight
直到您实际上尝试在测试中使用 flight0
变量。你可以通过简单地在末尾添加一个爆炸来解决这个问题,就像这样 let!(:flight_0) {}
.
看起来我在这个例子中的更新测试开始时输了 'San Francisco' - 不知道为什么 - 当我在 Post 测试结束时做一个 puts response.body一切正常 - 这是我的 flights_spec.rb:
require 'rails_helper'
require 'spec_helper'
require 'flight'
RSpec.describe FlightsController, type: :controller do
render_views
let(:flight0) { Flight.create(:destination => "Las Vegas") }
it "Get Test" do
puts 'Get Test'
get :index, :format => :json
puts "Body = " + response.body
expect(response.body).to include('Las Vegas')
end
it "Post Test" do
puts 'Post Test'
post :create, :flight => {:destination => "San Francisco"}
puts "Post status:" + response.status.to_s
expect(response).to redirect_to(assigns(:flight))
redirect_to(response.headers['Location'])
get :index, :format => :json
puts "Body = " + response.body
expect(response.body).to include("San Francisco")
end
it "Update Test" do
puts 'Delete Test'
get :index, :format => :json
puts "Body = " + response.body
expect(response.body).to include("San Francisco")
end
end
RSpec 假设您编写的每个测试都独立于其他测试。但是,按照您在这里的方式,Update Test
依赖于 Post Test
来创建它需要的数据。 RSpec 自动撤消您在每次测试之间所做的任何更改。您可以将每个 it
块视为将所有内容重置回初始状态。
一个快速的解决方法是简单地将删除瞄准 Las Vegas 对象,因为由于 let
语句:
it "Update Test" do
puts 'Delete Test'
get :index, :format => :json
puts "Body = " + response.body
expect(response.body).to include("Las Vegas")
# rest of your test
end
另外我要注意的是,您可能 运行 遇到 let
语句的问题,因为它是延迟实例化的,这意味着它可能不会真正创建拉斯维加斯 flight
直到您实际上尝试在测试中使用 flight0
变量。你可以通过简单地在末尾添加一个爆炸来解决这个问题,就像这样 let!(:flight_0) {}
.