我正在编写一个节点包装器来与external api进行交互,并且很难测试异步createJob
方法。以下是测试用例代码:
api_key = "test_0dc8d51e0acffcb1880e0f19c79b2f5b0cc"
lob = require('../src/lob')(api_key)
should = require("should")
chai = require("chai")
data =
name: "test name"
to: "Bob"
from: "Alice"
object1: "foo"
object2: "bar"
describe "Job", ->
@timeout(50000)
describe "create", ->
it "should create a job with address_id", (done) ->
lob.jobs.createJob data, (new_job) ->
new_job.should.not.be.empty
new_job['name'].should.equal(data['name'])
done()
修改
以上代码解决了问题
答案 0 :(得分:3)
(在coffeescript中回答。如果您想将咖啡转换为js,请使用http://coffeescript.org/,然后使用Try CoffeeScript标签。)
如果您正在测试异步代码,则需要使用done
模式:
describe "User", ->
describe "#save()", ->
it "should save without error", (done) ->
user = new User("Luna")
user.save done
“异步代码”下的http://visionmedia.github.io/mocha/。看起来像createJob正在返回true,因为测试正在试图通过代码发送帖子等并说“是的,我发送了所有你问过的东西!”。
我推荐Martin Fowler关于使用mocha测试asynch js代码的文章:http://martinfowler.com/articles/asyncJS.html。
我有一大堆代码用于测试从数据库中检索用户(使用sinon进行存根)。真实代码连接到db然后使用用户的配置调用onSuccess:onSuccess(config)
describe 'Config', ->
orgId = 'a'
errorHandler = ((msg) -> (throw msg))
beforeEach ->
readConfig = sinon.stub(sdl , 'getConfig')
readConfig.callsArgOnWithAsync(2, configSource, JSON.parse(jsonConfig))
afterEach ->
configSource.getConfig.restore()
......稍后
configSource.getConfig('520bc323de4b6f7845543288', errorHandler, (config) ->
config.should.not.be.null
config.should.have.property('preferences')
done()
)
答案 1 :(得分:3)
不要将此视为对操作的回答,而是将其标记为正确的奖励。
刚刚完成@jcollum回答这里是他的Javascript版代码:
describe('User', function(){
describe('#save()', function(){
it("should save without error", function(done){
var _user = new User("Moon");
_user.save;
done();
});
});
});
这很明显,但也许有些新手需要这个附录。