如何使用多组参数值来实现相同的功能?

时间:2018-06-28 15:54:48

标签: erlang eunit meck

我试图派发对application:get_env的调用,但是我正在测试一个使用两组不同的参数调用它的函数。

我像这样设置了两个单独的 var email_regex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; var mobile_regex = /^09[0-3][0-9]{8}$/u; var state1 = false; var state2 = false; var state3 = false; var state4 = false; $("#email").keyup(function () { if (email_regex.test($(this).val())) { $(this).removeClass("is-invalid"); $(this).addClass("is-valid"); $("#cn-email").text(""); state1 = true; } else { $(this).removeClass("is-valid"); $(this).addClass("is-invalid"); $("#cn-email").text("لطفا یک ایمیل درست وارد کنید."); $("#cn-email").addClass("text-danger"); state1 = false; } if ($(this).val() == "") { $(this).removeClass("is-valid"); $(this).addClass("is-invalid"); $("#cn-email").text("لطفا ایمیل خود را وارد کنید."); $("#cn-email").addClass("text-danger"); state1 = false; } return state1; }); $("#name").keyup(function () { if ($(this).val().length <= 4) { $(this).removeClass("is-valid"); $(this).addClass("is-invalid"); $("#cn-name").text("نام و نام خانوادگی نمی تواند کمتر از 4 کاراکتر باشد."); $("#cn-name").addClass("text-danger"); state2 = false; } else { $(this).removeClass("is-invalid"); $(this).addClass("is-valid"); $("#cn-name").text(""); state2 = true; } if ($(this).val() == "") { $(this).removeClass("is-valid"); $(this).addClass("is-invalid"); $("#cn-name").text("لطفا نام و نام خانوادگی خود را وارد کنید."); $("#cn-name").addClass("text-danger"); state2 = false; } return state2; }); $("#mobile").keyup(function () { if (mobile_regex.test($(this).val())) { $(this).removeClass("is-invalid"); $(this).addClass("is-valid"); $("#cn-mobile").text(""); state3 = true; } else { $(this).removeClass("is-valid"); $(this).addClass("is-invalid"); $("#cn-mobile").text("لطفا یک شماره موبایل درست وارد کنید."); $("#cn-mobile").addClass("text-danger"); state3 = false; } if ($(this).val() == "") { $(this).removeClass("is-valid"); $(this).addClass("is-invalid"); $("#cn-mobile").text("لطفا شماره موبایل خود را وارد کنید."); $("#cn-mobile").addClass("text-danger"); state3 = false; } return state3; }); $("#message").keyup(function () { if ($(this).val().length <= 10) { $(this).removeClass("is-valid"); $(this).addClass("is-invalid"); $("#cn-message").text("متن پیغام نمی تواند کمتر از 10 کاراکتر باشد."); $("#cn-message").addClass("text-danger"); state4 = false; } else { $(this).removeClass("is-invalid"); $(this).addClass("is-valid"); $("#cn-message").text(""); state4 = true; } if ($(this).val() == "") { $(this).removeClass("is-valid"); $(this).addClass("is-invalid"); $("#cn-message").text("لطفا متن پیغام خود را وارد کنید."); $("#cn-message").addClass("text-danger"); state4 = false; } return state4; }); $("#submit").click(function () { $("#contact-form").submit(function (event) { event.preventDefault(); }); }); 调用,但是当我正在测试的函数尝试调用meck:expect时,它将失败并抛出application:get_env(my_app, my_param_one)error:function_clause

undefined

如何使用不同的参数值集来实现相同的功能?

1 个答案:

答案 0 :(得分:2)

第二个meck:expect(application, get_env, fun(my_app, my_param_one) -> {ok, "my_value_one"} end), meck:expect(application, get_env, fun(my_app, my_param_two) -> {ok, "my_value_two"} end), 正在覆盖第一个。

每当通过对不同的值集进行模式匹配在Erlang中定义函数时,都用分号分隔每组模式,如下所示:

meck

类似地,当您设置-module(sample). -export([create_greeting/2]). create_greeting("Grant", _Greeting) -> io:format("Good day sir!"); create_greeting(Name, Greeting) -> io:format("~s, ~s!", [Greeting, Name]). 语句时,一次定义函数,但用分号分隔每组模式/参数,如下所示:

meck