在 Rspec 中使用 ActiveModel 进行测试分配
Testing assigns with ActiveModel in Rspec
使用 Rspec 3.4,我收到一条消息 class:
class Message
include ActiveModel::Model
end
以下控制器规范失败:
context "with invalid params" do
it "assigns a newly created but unsaved message as @message" do
post :create, { message: @invalid_attributes }
expect(assigns(:message)).to be_a_new(Message)
失败信息是:
Failure/Error: expect(assigns(:message)).to be_a_new(Message)
NoMethodError:
undefined method `new_record?' for #<Message:0x00000006dc8a88>
所以看起来 rspec 在我调用 be_a_new(Message)
时调用了 new_record?
,并且因为我的消息 class 没有继承自 ActiveRecord,所以我收到了这个错误。
如何测试 assigns(:message)
确实是我的消息 class 的新实例?
我试过以下方法:
# this works, but I don't like it
expect(assigns(:message).to_not be(nil)
# these fail because the instances are not equal
expect(assigns(:message).to eq(Message.new)
expect(assigns(:message).to eql(Message.new)
expect(assigns(:message).to eqeul(Message.new)
expect(assigns(:message).to be(Message.new)
这是一种简单的方法吗?
我认为你应该尝试以下操作:
expect( assigns(:message) ).to be_kind_of Message
使用 Rspec 3.4,我收到一条消息 class:
class Message
include ActiveModel::Model
end
以下控制器规范失败:
context "with invalid params" do
it "assigns a newly created but unsaved message as @message" do
post :create, { message: @invalid_attributes }
expect(assigns(:message)).to be_a_new(Message)
失败信息是:
Failure/Error: expect(assigns(:message)).to be_a_new(Message)
NoMethodError:
undefined method `new_record?' for #<Message:0x00000006dc8a88>
所以看起来 rspec 在我调用 be_a_new(Message)
时调用了 new_record?
,并且因为我的消息 class 没有继承自 ActiveRecord,所以我收到了这个错误。
如何测试 assigns(:message)
确实是我的消息 class 的新实例?
我试过以下方法:
# this works, but I don't like it
expect(assigns(:message).to_not be(nil)
# these fail because the instances are not equal
expect(assigns(:message).to eq(Message.new)
expect(assigns(:message).to eql(Message.new)
expect(assigns(:message).to eqeul(Message.new)
expect(assigns(:message).to be(Message.new)
这是一种简单的方法吗?
我认为你应该尝试以下操作:
expect( assigns(:message) ).to be_kind_of Message