ruby-on-rails - 无法命中数据库,通过 minitest 集成测试

标签 ruby-on-rails testing integration-testing omniauth minitest

我不断得到测试 F

"User.count" didn't change by 1.

即使我不应该这样做(因为 SessionsController#create 确实已经有效)。

测试代码是这样的:

- [重构/更新] - 我还放弃了模型中的所有验证,只是为了看看……但什么也没有

class UsersSignupTest < ActionDispatch::IntegrationTest

  test "valid signup information" do   

    OmniAuth.config.test_mode = false

    get signup_path
    assert_difference 'User.count', 1 do
      get '/auth/identity/register', params: {
        user: { name: "Example User",
                email: "user@example.com",
                password_digest: "password",
                identities: { user_id: 1, 
                              provider: "identity", 
                              uid: "1"}}}
    end

    OmniAuth.config.test_mode = true
  end
end 

完整输出:

UsersSignupTest#test_valid_signup_information = 0.69 s = F


Failure:
UsersSignupTest#test_valid_signup_information [/home/lsoave/rails5/gitwatcher/test/integration/users_signup_test.rb:19]:
"User.count" didn't change by 1.
Expected: 5
  Actual: 4

使用 tail -f log/test.log 我得到以下信息:

----------------------------------------------
UsersSignupTest: test_valid_signup_information
----------------------------------------------
Started GET "/signup" for 127.0.0.1 at 2016-03-07 15:17:16 +0100
Processing by UsersController#new as HTML
  Rendered users/new.html.erb within layouts/application (37.7ms)
  User Load (0.3ms)  SELECT  "users".* FROM "users" WHERE "users"."id" IS NULL LIMIT $1  [["LIMIT", 1]]
  Rendered layouts/_navigation.html.erb (3.6ms)
  Rendered layouts/_signup-modal.html.erb (2.6ms)
  Rendered layouts/_messages.html.erb (0.4ms)
  Rendered layouts/_footer.html.erb (0.2ms)
Completed 200 OK in 265ms (Views: 250.3ms | ActiveRecord: 0.6ms)
   (0.4ms)  SELECT COUNT(*) FROM "users"
Started GET "/auth/identity/register?user[name]=Example+User&user[email]=user%40example.com&user[password_digest]=[FILTERED]&user[identities][user_id]=1&user[identities][provider]=identity&user[identities][uid]=1" for 127.0.0.1 at 2016-03-07 15:17:16 +0100
   (0.3ms)  SELECT COUNT(*) FROM "users"
   (0.2ms)  ROLLBACK

更新说明:

真正的模型是 User has_many identities/Identity belong_to user 关系,我不确定它是否正确表示为:

...
params: {
            user: { name: "Example User",
                    email: "user@example.com",
                    password_digest: "password",
                    identities: { user_id: 1, 
                                  provider: "identity", 
                                  uid: "1"}}}
...

最佳答案

尝试用以下内容替换 identities: piece:

identities_attributes: { '0': {provider: "identity", uid: "1"}}

并检查您的用户模型包含:

accepts_nested_attributes_for :identities

无需自己处理将 user_id 分配给依赖模型,这正是 Rails 擅长的。

关于ruby-on-rails - 无法命中数据库,通过 minitest 集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35841408/

相关文章:

ruby-on-rails - rails 模型关系 - 寻找最简单的代码

ruby-on-rails - 带有命名空间模型名称的 Rails form_for

ruby-on-rails - 如何使用 Puma 配置 Rails 以使用 SSL?

spring - Maven/ Spring : Automatic Test Run of Generated WAR

testing - 自动生成测试用例以滥用 BNF 语法

javascript - ExecuteScript 不执行 html 中描述的函数,这些函数在页面加载后运行

ruby-on-rails - rails : How do I login a Devise user in an integration test?

ruby-on-rails - 两个事件记录关系的联合应该是 ruby​​ on rails 中的另一个事件记录

php - 如何为使用 Braintree 和静态方法调用的端点编写集成测试

bash - 使用 bash 与 CMake 和 CTest 进行简单的集成测试?