使用超级,摩卡和模型进行环回测试

时间:2016-01-26 00:23:56

标签: node.js mocha loopbackjs supertest

Google groups post on deprecating loopback-testing上有一个问题,询问提供一个如何在没有环回测试的情况下实现测试的正确示例。该主题讨论使用supertest代替。

以下是我尝试将Mocha,supertest和模型(from app.js)结合起来的尝试。当我自己运行文件时,结果非常好。但是,如果我有另一个测试文件(比如test-teacher.js),那么第一个测试文件(称为test-student.js)开始以奇怪的方式失败,我无法描述。

我是否遗漏了某些东西或者可以使用不能使用的模型,就像我在下面使用它们一样?

describe('/Student', function () {

    var server = require('../server/server')
    var loopback = require('loopback')
    var supertest = require('supertest')
    var request = require('supertest')(server)

    var dataSource = server.dataSource('db', {adapter: 'memory'})

    var Student = dataSource.define('Student', {
        'id': Number,
        'points': Number
    });

    beforeEach(function () {
        Student.updateOrCreate({id: 1, points: 5000});
    })


    it('Post a new student', function (done) {
        request.post('/api/Students').send({points: 5000}).expect(200, done)

    })


})

2 个答案:

答案 0 :(得分:15)

根据jakerella对上一个答案的反馈,我更改了上面的代码,以便我不必在代码中从头开始重新定义模型(感谢jakerella!)

使用下面的代码,我可以使用npm test将多个不同模型的所有测试作为单个套件运行而不会出现任何故障。

由于我只对个别订单感兴趣...不需要倾听和关闭。我怀疑,如果我正在测试创建的模型的整体实例,那么它将成为必需。

describe('/Student', function () {

    var server = require('../server/server')
    var request = require('supertest')(server)
    var expect = require('expect.js')

    var Student 

    before(function() {
        Student = server.models.Student    
    })

    beforeEach(function (done) {
        Student.upsert({id: 1, points: 5000}, function() { done() })
    })    

    it('Post a new student', function (done) {
        request.post('/api/Students').send({points: 5000}).expect(200, done)
     })
})

答案 1 :(得分:8)

想把它扔进答案......第一个问题是一个未定义的dataSource var,但是你在两个测试中也重新定义了Student。我建议使用LoopBack应用程序和已定义的模型(通常在common/models/中)。然后测试的基本实现(我使用的)类似于下面的代码(使用mocha和{{1 }})。请注意chaibeforeEach以启动和停止服务器。

afterEach