lambdabaa / envoy Goto Github PK
View Code? Open in Web Editor NEWEnvoy is a multiplayer trading card game built with meteor.
Envoy is a multiplayer trading card game built with meteor.
Our webdriver test suite
For each test. It takes a long time. We need to parallelize tests or otherwise speed things up so that developers can get faster test feedback.
The easiest ways to make changes, build, and test envoy have (dramatically) diverged from what's recommended in the 0.0.1 README. We should update the material there for the 0.1.0 release.
1) game clicking card in hand:
StaleElementReferenceError: Element is no longer attached to the DOM
Command duration or timeout: 10 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/stale_element_reference.html
Build info: version: '2.40.0', revision: 'fbe29a9', time: '2014-02-19 20:54:28'
System info: host: 'box706', ip: '127.0.0.1', os.name: 'Linux', os.arch: 'amd64', os.version: '3.8.0-35-ref-generic', java.version: '1.7.0_55'
Session ID: eddb8567-39ca-4f3d-b371-d1065d01da27
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{platform=LINUX, acceptSslCerts=true, javascriptEnabled=true, cssSelectorsEnabled=true, databaseEnabled=true, browserName=firefox, handlesAlerts=true, browserConnectionEnabled=true, webStorageEnabled=true, nativeEvents=false, rotatable=false, locationContextEnabled=true, applicationCacheEnabled=true, takesScreenshot=true, version=26.0}]
at new bot.Error (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/atoms/error.js:109:18)
at Object.bot.response.checkResponse (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/atoms/response.js:106:9)
at /home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:276:20
at /home/ubuntu/envoy/node_modules/selenium-webdriver/lib/goog/base.js:1178:15
at webdriver.promise.ControlFlow.runInNewFrame_ (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:1598:20)
at notify (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:428:12)
at notifyAll (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:397:7)
at resolve (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:375:7)
at fulfill (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:493:5)
at /home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:1465:10
==== async task ====
WebElement.isDisplayed()
at webdriver.WebDriver.schedule (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:267:15)
at webdriver.WebElement.schedule_ (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:1609:23)
at webdriver.WebElement.isDisplayed (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:1947:15)
at /home/ubuntu/envoy/test/integration/lib/helper.js:13:28
at /home/ubuntu/envoy/node_modules/selenium-webdriver/lib/goog/base.js:1178:15
at webdriver.promise.ControlFlow.runInNewFrame_ (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:1598:20)
at notify (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:428:12)
at notifyAll (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:397:7)
at resolve (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:375:7)
==== async task ====
at webdriver.promise.ControlFlow.wait (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:1355:15)
at webdriver.WebDriver.wait (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:531:21)
at /home/ubuntu/envoy/test/integration/game_test.js:176:23
at /home/ubuntu/envoy/node_modules/selenium-webdriver/lib/goog/base.js:1178:15
at webdriver.promise.ControlFlow.runInNewFrame_ (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:1598:20)
at notify (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:428:12)
at notifyAll (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:397:7)
at resolve (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:375:7)
at fulfill (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:493:5)
Most interactions in envoy will be between logged in users, so we need an easy way for the integration tests to log in.
Currently, when we instrument our codebase for coverage with istanbul, we modify our source code. This is bad. It's even worse when the tests fail and bail partway through the suite and leave our codebase in an unstable state. We should build, instrument, and pass off our code to meteor in a scratch space.
In fed7dc7, we added jshint. It has never (in my experience) complained about code correctness/style. We should make add a .jshintrc
file to make sure that jshint is configured well.
Users should be able to read all of the game state from the gameplay ui. This information includes:
v0.1.0 introduced a lot of gameplay ui and functionality. It's extremely unsightly and we should change that for v0.2.0.
As a user, I would like to be able to create and configure a game with the deck (custom or prebuilt) of my choice. Once the game is created, it should be added to a queue of open games so that I can find an opponent. Other players should be able to join my game while I don't have an opponent.
From the README:
To run envoy locally, you must first globally install:
firefox
java
meteor
mongodb
xvfb
I would consider using docker to package your dependencies (either as one bigass container or multiple?) then using volume mounts to run stuff... its a lot lighter weight then vagrant and is much faster. I wrote a blog post about this http://lightsofapollo.github.io/2014/01/31/docker-volumes/
Sadly there are not too many options to deploy the docker containers outright (but the process is very similar to what heroku does to generate their LXC containers)
Setting up to develop with grunt build
is really easy! However, the test suite also builds the app and both the development and test workflows make use of the /build
directory. We should use two different directories to avoid development and test collisions. Also, we should run meteor and mongo on different ports during testing to avoid port collisions.
The project is starting to take shape as the codebase grows. I'm really enjoying being able to move fast because stuff works and I'm doing things my way. We should document what that is in the hopes that my process is good process!
The v0.1.0 release will introduce features that are worth showing non-engineers and having game players experiment with! That makes now a great time to come up with a janky way to unleash envoy upon the world.
We have [thus far] been too willy nilly about syncing all of our data to every client all the time. This has serious performance implications! We should take some time for v0.2.0 to make sure that we're only syncing that needs to be sent to each client.
In dbf6ddc we added a "build" task that decoupled our source tree from the actual running of our app. This was a good thing. However, it also means that meteor's nice live updates are no longer working. We should add a grunt task to rebuild envoy when the source tree changes.
At f1aca13 they include a rogue }
character at the end of the deckname.
In c208c45 we added an incremental, as-you-save build task that watches the app directory for source code changes and copies them over to build. Sadly, this is quite slow. We should speed things up by doing something like polling the filesystem more frequently or only copying over files which have been changed instead of the whole source tree.
Meteor 0.8.0 is out with a faster templating engine called blaze. We should upgrade from 0.7. 2/spark.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.