2017-03-31 11 views
2

私は今日、ジャスミンでテストを開始しました。 NodeJSで開発されたGraphQLサーバで作業しているので、jasmine-nodeを使用しています。ジャスミンノードが実行されないことを期待しました

次は私が自分自身を書き、私の最初の仕様である、と私はそれが働いていたと思った。たくさんで

.. 

Finished in 0.018 seconds 
2 tests, 4 assertions, 0 failures, 0 skipped 


Error: null 
http://localhost:8000/graphql 
StatusCode: 400 
Body: {"errors":[{"message":"Must provide query string."}]} 

が、これは私が期待するものを正確にある場合:

const request = require('request'); 
const config = require('../sources/config'); 

const base_url = `http://localhost:${config.graphqlPort}/${config.graphqlRoute}`; 

describe("GraphQLServer.",() => { 
it("Should expect something.",() => { 
    expect(1).not.toEqual(2); 
    expect(1).toEqual(1); 
    expect(true).toBe(true); 
    expect(false).not.toBe(true); 
}); 

describe('When request is made.',() => { 
    it('Returns statuscode 200.',() => { 
     request.get(base_url, (error, response, body) => { 
      console.log('Error: ', error); 
      console.log(base_url); 
      console.log('StatusCode: ', response && response.statusCode); 
      console.log('Body:', body); 
      expect(true).toBe(true); 
      expect(true).toBe(false); 
      expect(response.statusCode).toBe(200); 
      expect(response.statusCode).toBe(400); 
      done(); 
      }); 
     }); 
    }); 
}); 

これは、次のような結果になります。私は、クエリ文字列を使わないでリクエストを行うので、本体のエラーが予想されます。

問題は次のとおりです。expectsit("Should expect something")内の4つの役に立たない(明白な)問題はうまくいきます。結果は4 assertionsです。他の4つのexpectの内部it("Returns statuscode 200.")は単に結果には(彼らは失敗しないと彼らは通過しません)ですが、console.logのです。

私がオンラインで見つけたすべての例は、私がここでやることとまったく同じように見えますが、これを動作させることはできません。

答えて

0

私はJasmineの正確な構文を忘れて修正を提案しますが、私は答えを知っていると信じています。これは、約束事でテストする古典的なケースです。テストが完了した後に結果が返ってくるので、あなたのexpectコールは、テストにもう影響を及ぼさないコンテキストでは発生しません。私はあなたのコードとジャスミン・ノードのドキュメント間で気づい

1つの違いはitに渡される関数は、パラメータとしてdoneを取るべきであるということですが、あなたは() =>の代わり(done) =>を持っています。それはあなたが見ている行動を引き起こすかもしれません。

+0

ありがとうKev!私は正直なところ、そのばかげたミスを見ませんでした。私は数週間前にJavascriptで開発を開始したことを認めなければなりません。だから私はそのようなバグを早く見つけ出す経験がないと思います。 Javascriptは、それが必要ではないというエラーを出さないという習慣で、正確には役立たない。しかし、ありがとう! – Kenny

+0

あなたは大歓迎です!本当に、多くのJS文脈がエラーに対する最悪のフィードバックをもたらします。本当に時々狂っていることがあります。助けてうれしい! – Kev

1

Kevは正しいですが、Jasmineの構文では、非同期の実行完了後にpromise結果にexpect文を入れています。それは次のようになります:

it ("should do a thing with promises", function(done) { 
      myObject.doAThingWithPromises('') 
       .then(function (promiseResult) { 
        expect(promiseResult).toBeDefined(); 
        done(); 
       }) 
     }); 
+0

ありがとう、あなたの精緻化のためにエリオット:) – Kenny

+0

この場合、 'request.get(...)。then(()=> {... done()})' – Kev

関連する問題