我正在尝试检查我的RESTful控制器中的新操作是否设置了所需Object类型的实例变量.看起来非常典型,但执行它时遇到了麻烦
客户控制器
def new
@client = Client.new
end
Run Code Online (Sandbox Code Playgroud)
测试
describe "GET 'new'" do
it "should be successful" do
get 'new'
response.should be_success
end
it "should create a new client" do
get 'new'
assigns(:client).should == Client.new
end
end
Run Code Online (Sandbox Code Playgroud)
结果是...
'ClientsController GET 'new' should create a new client' FAILED
expected: #,
got: # (using ==)
这可能是因为它试图比较两个不同的活动记录实例.那么,我如何检查控制器是否设置了一个包含Client模型新实例的实例变量.
fak*_*tic 37
#rspec的技术支持帮我解决了......
assigns(:client).should be_kind_of(Client)
Run Code Online (Sandbox Code Playgroud)
Att*_*ffy 16
你可以使用Rails的new_record吗?检查给定实例是否已经保存到数据库的方法:
assigns(:client).should be_a(Client)
assigns(:client).should be_new_record
Run Code Online (Sandbox Code Playgroud)
(出于历史原因,您不能使用[:client]分配:http://guides.rubyonrails.org/testing.html#the-four-hashes-of-the-apocalypse)
Epi*_*ene 15
对于2016 RSpec v3语法,请使用:
expect(assigns(:client)).to be_a(Client)
Run Code Online (Sandbox Code Playgroud)
此外,对于可能因问题标题而停在此处的其他人,以下是如何测试实例变量@client是否设置为任何内容
# in controller action
@client = Client.find_by(name: "John")
# spec assignment based on collection membership
expect(assigns.keys).to include('client')
Run Code Online (Sandbox Code Playgroud)
请参阅@AttilaGyörffy关于为什么必须使用字符串键访问分配哈希的答案.
| 归档时间: |
|
| 查看次数: |
19645 次 |
| 最近记录: |