Beego - 端点测试

2024-02-13

我正在测试 beego 的 http 自定义端点

package test

import (
    "github.com/astaxie/beego"
    . "github.com/smartystreets/goconvey/convey"
    _ "golife-api-cons/routers"
    "net/http"
    "net/http/httptest"
    "path/filepath"
    "runtime"
    "testing"
)

func init() {
    _, file, _, _ := runtime.Caller(1)
    apppath, _ := filepath.Abs(filepath.Dir(filepath.Join(file, ".."+string(filepath.Separator))))
    beego.TestBeegoInit(apppath)
}

// TestGet is a sample to run an endpoint test
func TestGet(t *testing.T) {
    r, _ := http.NewRequest("GET", "/my/endpoint/fetches/data", nil)
    w := httptest.NewRecorder()
    beego.BeeApp.Handlers.ServeHTTP(w, r)

    beego.Trace("testing", "TestGet", "Code[%d]\n%s", w.Code, w.Body.String())

    Convey("Subject: Test Station Endpoint\n", t, func() {
        Convey("Status Code Should Be 200", func() {
            So(w.Code, ShouldEqual, 200)
        })
        Convey("The Result Should Not Be Empty", func() {
            So(w.Body.Len(), ShouldBeGreaterThan, 0)
        })
    })
}

当我跑步时使用go test -v ,

我得到回应dial tcp :0: getsockopt: connection refused

我正在使用在本地运行的 MariaDB, 我已经验证使用netstat -tulpn我的数据库运行得很好(如果我使用邮递员并且我的服务器正在运行,我会得到有效的响应)

包含行后的一个奇怪的观察结果_ "golife-api-cons/routers"我什至在运行测试之前就收到此错误

我的测试通过,响应 200 OK ,但是当我响应上述错误时没有任何数据

EDIT

使用的默认路径TestBeegoInit使用的函数是/path/to/my/project/test这不是所需的路径,所以我也尝试给出绝对路径,但我仍然无法连接数据库。


经过多次尝试,我发现 beego 初始化了名为 as 的变量AppPath in beego/conf.go like -

AppPath, _ = filepath.Abs(filepath.Dir(os.Args[0]))

当你运行测试时,你可以使用go test -v

但结果是os.Args[0]是文本可执行文件,它将是/tmp/路径/到/测试并不是路径/到/应用程序/exe

因此结果它没有找到配置/应用程序.conf它位于您的应用程序路径中,其中包含数据库连接详细信息。 负责线beego/conf.go -

appConfigPath = filepath.Join(AppPath, "conf", "app.conf")

这一切都发生在beego’sinit当你说时起作用

import (
  "github.com/astaxie/beego"
  _ "path/to/routers"
)

对此的黑客是 -

使用 init 函数创建一个新的包/文件,它看起来有 -

package common

import (
    "os"
    "strings"
)

func init() {
    cwd := os.Getenv("PWD")
    rootDir := strings.Split(cwd, "tests/")
    os.Args[0] = rootDir[0] // path to you dir
}

在这里你正在改变os.Args[0]并分配您的目录路径

确保在 beego 之前导入它,所以现在导入看起来像

import (
  _ "path/to/common"
  "github.com/astaxie/beego"
  _ "path/to/routers"
)

最后你连接到数据库了!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Beego - 端点测试 的相关文章

  • 在 Go 中,如何将函数的 stdout 捕获到字符串中?

    例如 在 Python 中 我可以执行以下操作 realout sys stdout sys stdout StringIO StringIO some function prints to stdout get captured in t
  • Go 编程 - 使用指针绕过访问权限

    假设我的项目有以下层次结构 fragment fragment go main go 并且在fragment go我有以下代码 只有一个 getter 没有 setter package fragment type Fragment str
  • 从 Go Slice 中选择一个随机值

    情况 我有一些值 需要从中随机选择一个值 然后我想将它与固定字符串连接起来 到目前为止 这是我的代码 func main create the reasons slice and append reasons to it reasons m
  • Google App Engine Golang 没有这样的文件或目录

    我正在用 Go 开发一个 Google App Engine 项目 并陷入了读取文件的困境 事实上 应用程序在本地运行得很好 然而 部署时 它会恐慌告诉我没有这样的文件或目录 这是我的 fileValue 方法 func fileValue
  • 如何自定义解析错误的 HTTP 400 响应?

    我编写了一个 REST API 服务 要求所有响应均为 JSON 但是 当 Go HTTP 请求解析器遇到错误时 它会返回 400 作为纯文本响应 而不会调用我的处理程序 例子 gt curl i H Authorization Basic
  • runtime.LockOSThread 是否允许子 goroutine 在同一个操作系统线程中运行?

    我明白在 Go 中 runtime LockOSThread https golang org pkg runtime LockOSThread将一个 goroutine 绑定到一个操作系统线程 并且不允许其他 goroutine 在该线程
  • go 中的属性更改通知

    如何在 go 中向多个接收器发出 属性 更改信号 类似于在 Qt 中使用通知信号定义属性的方式 例如 如果您想象有一些值需要以多种方式显示 例如进度值可以同时显示为进度条和文本 当基础值发生变化时 两者都需要更新 一种方法可能是利用chan
  • 无法理解 5.6.1。注意事项:捕获迭代变量

    我正在学习 Go 但无法理解 var rmdirs func for dir range tempDirs os MkdirAll dir 0755 rmdirs append rmdirs func os RemoveAll dir NO
  • 给定方法值,获取接收者对象

    Go 有没有办法从方法值获取接收者对象 例如有没有这样的MagicFunc这将使以下程序输出字符串my info来自底层 Foo 实例 package main import fmt type Foo struct A string fun
  • 视频第一帧

    我正在创建一个单页应用程序 后端使用 Golang 前端使用 javascript 我想找到一种使用 Golang 获取视频第一帧的方法 首先 我将 mp4 视频文件上传到服务器 它保存在服务器上 有没有办法使用 Golang 获取该视频的
  • Golang 基础知识 struct 和 new() 关键字

    我正在学习 golang 当我阅读描述结构的章节时 我遇到了初始化结构的不同方法 p1 passport var p2 passport p3 passport Photo make byte 0 0 Name Scott Surname
  • 在 IntelliJ IDEA 中运行。多个文件和错误未定义:数据

    我想使用 IntelliJ IDE 社区版编写代码GO Go语言 我安装了正确的插件 并安装了构建应用程序所需的所有工具 我的应用程序包含以下两个文件 每个都在目录中 事件服务器 Main go Data go 如果我想使用 Run Ctl
  • 使用 testify 模拟接口方法两次,输入和输出不同

    如何在 golang 测试中模拟接口方法两次 例如 type myCache interface Get key string data interface error type service struct cache myCache f
  • 如何在C#中执行Go函数

    有没有办法从 C 执行 Go 函数 例如 对于 Python 我会使用 Ironpython 我知道我可以生成一个进程来执行 Go 脚本 但如果可能的话 我真的不想回退到这样的解决方案 Google 搜索没有显示任何内容 那么有什么方法可以
  • 在golang中获取TTFB(第一个字节的时间)值

    我正在尝试获取 TTFB 值和 Connect 值 c exec Command curl w Connect time connect TTFB time starttransfer Total time time total o dev
  • 如何在 Golang 中将 []byte XML 转换为 JSON 输出

    有没有办法在 Golang 中将 XML byte 转换为 JSON 输出 我有以下功能body is byte但我想在一些操作之后将此 XML 响应转换为 JSON 我试过了Unmarshal in xml打包没有成功 POST func
  • 重新插入通道导致死锁

    我有稳定的入站 作业 流 将其输入到无缓冲通道中 我有一个for range循环来迭代项目并处理它们 如果处理该项目失败 我会将项目重新插入通道中 以便稍后重试 问题是当我将项目重新插入通道时 它陷入僵局 我明白为什么会发生这种情况 处理器
  • 我应该避免在 golang 中使用单例包吗?

    现在我有一个包裹store包含以下内容 package store var db Database func Open url string error open db connection func FindAll model inter
  • 递归追加到切片不起作用

    我正在尝试学习 Go 但我不明白为什么递归调用堆栈末尾的这段代码返回一个空切片 有帮助吗 还tmp甚至似乎没有在调试器中注册 func main input 3 int 4 6 7 expected 6 7 4 6 7 4 6 4 7 fm
  • 如何在 Go 中从 stdin 解析无限 json 数组?

    我正在尝试编写一个 i3status 的小替代品 一个与 i3bar 兼容的小程序进行通信this http i3wm org docs i3bar protocol html协议 他们通过标准输入和标准输出交换消息 两个方向的流都是一个无

随机推荐

  • 启动 Nexus docker 镜像时如何设置管理员用户/密码

    当在 Nexus 2 docker 镜像中启动时 https hub docker com r sonatype nexus https hub docker com r sonatype nexus 如何配置它以将默认管理员用户密码更改为
  • 在 Clojure 中搜索 xml

    我有以下示例 xml
  • 有没有办法在 Protractor 测试中绕过 Chrome 地理定位对话框?

    在使用量角器自动化应用程序时 我遇到了这个问题 打开主页后 我会看到带有 阻止 允许 按钮的地理位置对话框 如果不选择任一选项 该对话框就无法继续 事实证明 这个对话框不是警报的实例 这就是为什么browser switchTo alert
  • 新 Activity 的 onStart 在父 Activity 的 onStop 之前调用

    我有一份申请 我用startActivity 开始活动 谁能真正告诉我为什么系统会调用onStart 首先是新 Activity 而不是父活动onStop 这可能吗 没有系统错误 我找到了在 onStart 之后直接调用 Fragment
  • 从文件生成频率表

    给定一个每行包含一个数字的输入文件 我如何计算某个项目在该文件中出现的次数 cat input txt 1 2 1 3 1 0 期望的输出 gt 1 3 1 1 cat output txt 0 1 1 3 2 1 3 1 如果该解决方案也
  • Postgres SELECT 数组中的值

    我有一个看起来像这样的 postgres 表 缩短 id serial col1 character varying 1 Life Health VA Data 我正在尝试执行以下操作 SELECT FROM mytable WHERE L
  • 析构函数的执行顺序?

    我知道c 中的析构函数没有执行顺序 我在几个类中使用以下结构 它是为了破坏实例和静态信息 public class MyClass private static readonly Destructor DestructorObject ne
  • =importXML() 中的 xpath 用于提取元描述

    我正在尝试使用 Xpath 使用 Google Sheets 从网页中提取元描述 我正在努力提取标题 importXml www example com title 以下是我的两个学习来源 http seogadget co uk play
  • 简单 MySQL 子查询性能

    考虑 2 个 MySQL 查询 SELECT ue userid e courseid FROM SELECT id courseid FROM mdl enrol WHERE status 0 AND courseid IN 46 e I
  • 使用 ADO .NET 调用 SQL 函数

    我想要在 SQL Server 中创建调用函数 它接收两个参数并返回一个整数 当我调用存储过程时 我使用以下代码 sqlcmd CommandType CommandType StoredProcedure sqlcmd CommandTe
  • C 或 C++ 中乘法和除法的较高部分?

    当我在汇编中将一对 4 字节整数相乘时 结果的较低部分在 EAX 中 较高部分在 EDX 中 如果我使用 C 或 C 并且我想获得更高的部分 是否可以不使用内联汇编 是否可以以同样的方式从 EAX 获得整数除法结果 从 EDX 获得模数结果
  • Android NDK - 附加包含目录

    我正在使用 Android NDK 构建共享库 我包含了 Android mk 文件中的一个片段 该片段给我带来了一些问题 LOCAL PATH call my dir other module here other module here
  • 在 React Native 中使用 React Navigation 隐藏 StackNavigator 上的标头

    我有以下内容 import React from react import StyleSheet Text View Button from react native import StackNavigator from react nav
  • 专门化模板类的模板成员函数?

    我有一个模板类 它有一个需要专门化的模板成员函数 如下所示 template
  • C#:获取从表单发布的值[重复]

    这个问题在这里已经有答案了 我使用带有方法 post 的表单从另一个页面发布一些数据 我想知道的是 获取这些值的最佳方法是什么 按以下形式的每个名称 Request name 或者有什么方法可以获取数据集合并迭代它 谢谢 你可以写 fore
  • 慢速 SoapHttpClientProtocol 构造函数

    我正在使用 Microsoft Dynamics CRM 进行一些实验 您通过 Web 服务与它交互 我已将 Web 引用添加到我的项目中 Web服务接口非常丰富 生成的 Reference cs 有90k左右 我在控制台应用程序中使用网络
  • 使用 Linux 网络设备别名时指定 TCP 套接字的源 IP 地址

    对于一些特定的网络测试 我创建了一个 VLAN 设备 eth1 900 和几个别名 eth1 900 1 和 eth1 900 2 eth1 900 Link encap Ethernet HWaddr 00 18 E7 17 2F 13
  • 使用 Database.SetInitializer 避免霰弹枪手术

    The 规范答案 https stackoverflow com a 8679662 161457关于放置的地方Database SetInitializer来电处于Global asax对于网络项目 我正在寻找另一种选择 我们使用 Ent
  • 如何在 Go 中获得“虚拟主机”功能?

    使用 Nginx Django 创建虚拟主机就像编写适当的配置一样简单 对于 Go 我发现了这个https codereview appspot com 4070043 https codereview appspot com 407004
  • Beego - 端点测试

    我正在测试 beego 的 http 自定义端点 package test import github com astaxie beego github com smartystreets goconvey convey golife ap