Bra*_*eno 5 testing integration-testing ruby-on-rails
应客户的要求,每当应用程序检测到来自不同 IP 地址的同一用户的两个活动会话时,我都必须实现发送通知电子邮件。你如何测试这个?
创建集成测试 test/integration/multiple_ip_test.rb
require 'test_helper'
@@default_ip = "127.0.0.1"
class ActionController::Request
def remote_ip
@@default_ip
end
end
class MultipleIpTest < ActionDispatch::IntegrationTest
fixtures :all
test "send email notification if login from different ip address" do
post_via_redirect login_path,
:user => {:username => "john", :password => "test"}
assert_equal "/users/john", path
reset!
@@default_ip = "200.1.1.1"
post_via_redirect login_path,
:user => {:username => "john", :password => "test"}
assert_equal "/users/john", path
assert_equal 1, ActionMailer::Base.deliveries.size
end
end
Run Code Online (Sandbox Code Playgroud)
集成测试看起来很像功能测试,但也有一些区别。您无法使用@request更改源 IP 地址。这就是为什么我必须打开ActionController::Request类并重新定义remote_ip方法。
因为响应post_via_redirect始终为 200,所以我不使用assert_response :redirectURL 来验证用户是否已成功登录。
reset!需要调用来启动新会话。
有关集成测试的介绍,请查看Rails测试指南,遗憾的是他们没有提及该reset!方法。
| 归档时间: |
|
| 查看次数: |
1108 次 |
| 最近记录: |