簡體   English   中英

使用超級,摩卡和模型進行環回測試

[英]Loopback testing with supertest, mocha and models

關於棄用環回測試谷歌小組發布的帖子中有一個問題,即提供一個如何在沒有環回測試的情況下實現測試的正確示例。 該線程談論使用supertest而不是。

下面是我嘗試將Mocha,supertest和模型( 來自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)

    })


})

根據jakerella對前一個答案的反饋,我更改了上面的代碼,以便我不必在代碼中從頭開始重新定義模型(感謝jakerella!)

使用下面的代碼,我可以使用npm test多個不同模型的所有測試作為單個套件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)
     })
})

想把它扔進答案......第一個問題是一個未定義的dataSource var,但是你也在你的兩個測試中重新定義了Student 我的建議是使用LoopBack應用程序和已定義的模型(通常在common/models/ )。然后測試的基本實現(我使用的)類似於下面的代碼(使用mochachai )。 請注意beforeEachafterEach以啟動和停止服務器。

var assert = require('chai').assert,
    superagent = require('superagent'),
    app = require('../server/server');

describe('Person model', function() {
  var server;

  beforeEach(function(done) {
    server = app.listen(done);
  });

  afterEach(function(done) {
    server.close(done);
  });

  it('should log in and log out with live server', function(done) {
    superagent
      .post('http://localhost:3000/api/People/login')
      .send({ email: 'john@doe.com', password: 'foobar' })
      .set('Accept', 'application/json')
      .set('Content-Type', 'application/json')
      .end(function(err, loginRes) {
        if (err) { return done(err); }

          assert.equal(loginRes.status, 200);
          assert.ok(loginRes.body);
          assert.equal(loginRes.body.userId, 1);
        }
      });
  });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM