Reputation: 1150
I have a problem of testing my GAE golang app uses local packages. The probject looks something like this.
.
├── app.yaml
├── main.go
└── handler
└── handler.go
handler
package is imported in main.go
.
package main
import "handler"
Everything (e.g., goapp serve
) works fine until I started writing tests.
goapp test
complains that handler
package is not found. Seems like GOPATH
of goapp serve
and goapp test
are different. One solution I found is to put
handler
package outside of the project path and import it with fully
qualified name (e.g., github.com/.../handler
) but it doesn't make sense to me
to split the project in to separate places where they're tightly coupled. Are
there any good way to use and test local packages?
Following resources are found on this topic.
Upvotes: 2
Views: 668
Reputation: 4738
This comes late, but if anyone runs into the same issue, here is how to deal with it:
Organize your code this way
/whereever
└── /myproject
└──/src
├── app.yaml
├── main.go
└── /handler
└── handler.go
Use unqualified imports for your project code e.g.
import handler
Run goapp serve
and goapp deploy
from inside the src folder. serve/deploy work relative to the app.yaml
cd /whereever/myproject/src
goapp serve
Set GOPATH for goapp test
, it work based on GOPATH
cd /whereever/myproject #GOPATH expects a subfolder called src
GOPATH=$GOPATH:`pwd` #add the current folder to the GOPATH
goapp test ./... #run all tests in any subfolders
Reset your GOPATH if necessary
source ~/.profile #this assumes ~/.profile is where you have permanently set your GOPATH
All in all, "working as intended", but still a pain.
Upvotes: 2
Reputation: 5886
You need to import handler with a fully qualified name, however you don't need to move it out of the project to do so. If your project folder looks like this:
/go
└── /myproject
├── app.yaml
├── main.go
└── /handler
└── handler.go
Then your handler import should look like this:
import "myproject/handler"
Upvotes: 1